This source file includes following definitions.
- gdImageColorMatch
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
13
14
15 int gdImageColorMatch (gdImagePtr im1, gdImagePtr im2)
16 {
17 unsigned long *buf;
18 unsigned long *bp;
19 int color, rgb;
20 int x,y;
21 int count;
22
23 if( !im1->trueColor ) {
24 return -1;
25 }
26 if( im2->trueColor ) {
27 return -2;
28 }
29 if( (im1->sx != im2->sx) || (im1->sy != im2->sy) ) {
30 return -3;
31 }
32 if (im2->colorsTotal<1) {
33 return -4;
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