Annotation of embedaddon/php/ext/gd/libgd/gd_color.c, revision 1.1.1.1
1.1 misho 1: #if HAVE_GD_BUNDLED
2: # include "gd.h"
3: # include "gdhelpers.h"
4: #else
5: # include <gd.h>
6: # include "libgd/gdhelpers.h"
7: #endif
8:
9: #include "gd_intern.h"
10: #include "php.h"
11:
12: /* bring the palette colors in im2 to be closer to im1
13: *
14: */
15: int gdImageColorMatch (gdImagePtr im1, gdImagePtr im2)
16: {
17: unsigned long *buf; /* stores our calculations */
18: unsigned long *bp; /* buf ptr */
19: int color, rgb;
20: int x,y;
21: int count;
22:
23: if( !im1->trueColor ) {
24: return -1; /* im1 must be True Color */
25: }
26: if( im2->trueColor ) {
27: return -2; /* im2 must be indexed */
28: }
29: if( (im1->sx != im2->sx) || (im1->sy != im2->sy) ) {
30: return -3; /* the images are meant to be the same dimensions */
31: }
32: if (im2->colorsTotal<1) {
33: return -4; /* At least 1 color must be allocated */
34: }
35:
36: buf = (unsigned long *)safe_emalloc(sizeof(unsigned long), 5 * im2->colorsTotal, 0);
37: memset( buf, 0, sizeof(unsigned long) * 5 * im2->colorsTotal );
38:
39: for (x=0; x<im1->sx; x++) {
40: for( y=0; y<im1->sy; y++ ) {
41: color = im2->pixels[y][x];
42: rgb = im1->tpixels[y][x];
43: bp = buf + (color * 5);
44: (*(bp++))++;
45: *(bp++) += gdTrueColorGetRed(rgb);
46: *(bp++) += gdTrueColorGetGreen(rgb);
47: *(bp++) += gdTrueColorGetBlue(rgb);
48: *(bp++) += gdTrueColorGetAlpha(rgb);
49: }
50: }
51: bp = buf;
52: for (color=0; color<im2->colorsTotal; color++) {
53: count = *(bp++);
54: if( count > 0 ) {
55: im2->red[color] = *(bp++) / count;
56: im2->green[color] = *(bp++) / count;
57: im2->blue[color] = *(bp++) / count;
58: im2->alpha[color] = *(bp++) / count;
59: } else {
60: bp += 4;
61: }
62: }
63: gdFree(buf);
64: return 0;
65: }
66:
67:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>