PHP CVS 12 CVS PHP SRC PHP 4 3 EXT GD LIBGD GD C
Date: Wed, 09 Jul 2003 10:43:01 -0000

Subject: cvs: php-src(PHP_4_3) /ext/gd/libgd gd.c
From: pajoye@no-spam (Pierre-Alain Joye)

pajoye Wed Jul 9 06:43:01 2003 EDT
Modified files: (Branch: PHP_4_3)
/php-src/ext/gd/libgd gd.c Log:
- MFH Index: php-src/ext/gd/libgd/gd.c diff -u php-src/ext/gd/libgd/gd.c:1.24.2.17 php-src/ext/gd/libgd/gd.c:1.24.2.18
--- php-src/ext/gd/libgd/gd.c:1.24.2.17 Wed Jul 9 06:38:22 2003
+++ php-src/ext/gd/libgd/gd.c Wed Jul 9 06:43:01 2003
@@no-spam -2075,9 +2075,9 @@no-spam } else {
dc = gdImageGetPixel(dst, tox, toy);
- ncR = (int)gdImageRed (src, c) * (pct / 100.0) + gdImageRed (dst, dc) * ((100 - pct) / 100.0);

- ncG = (int)gdImageGreen (src, c) * (pct / 100.0) + (int)gdImageGreen (dst, dc) * ((100 - pct) / 100.0);

- ncB = (int)gdImageBlue (src, c) * (pct / 100.0) + gdImageBlue (dst, dc) * ((100 - pct) / 100.0);

+ ncR = (int)(gdImageRed (src, c) * (pct / 100.0) + gdImageRed (dst, dc) * ((100 - pct) / 100.0));

+ ncG = (int)(gdImageGreen (src, c) * (pct / 100.0) + gdImageGreen (dst, dc) * ((100 - pct) / 100.0));

+ ncB = (int)(gdImageBlue (src, c) * (pct / 100.0) + gdImageBlue (dst, dc) * ((100 - pct) / 100.0));

/* Find a reasonable color */
nc = gdImageColorResolve (dst, ncR, ncG, ncB);
@@no-spam -2368,14 +2368,22 @@no-spam void gdImageSkewX (gdImagePtr dst, gdImagePtr src, int uRow, int iOffset, double dWeight, int clrBack)

{
typedef int (*FuncPtr)(gdImagePtr, int, int);
- int i, r, g, b, a;
+ int i, r, g, b, a, clrBackR, clrBackG, clrBackB, clrBackA;
FuncPtr f;
int pxlOldLeft, pxlLeft=0, pxlSrc;
+ /* Keep clrBack as color index if required */
if (src->trueColor) {
+ pxlOldLeft = clrBack;
f = gdImageGetTrueColorPixel;
} else {
+ pxlOldLeft = clrBack;
+ clrBackR = gdImageRed(src, clrBack); + clrBackG = gdImageGreen(src, clrBack);
+ clrBackB = gdImageBlue(src, clrBack);
+ clrBackA = gdImageAlpha(src, clrBack);
+ clrBack = gdTrueColorAlpha(clrBackR, clrBackG, clrBackB, clrBackA);
f = gdImageGetPixel;
}
@@no-spam -2387,8 +2395,6 @@no-spam gdImageSetPixel (dst, i, uRow, clrBack);
}
- pxlOldLeft = clrBack;
-
for (i = 0; i < src->sx; i++) {
pxlSrc = f (src,i,uRow);
@@no-spam -2541,10 +2547,8 @@no-spam FuncPtr f;
if (src->trueColor) {
- dst = gdImageCreateTrueColor(src->sy, src->sx);
f = gdImageGetTrueColorPixel;
} else {
- dst = gdImageCreate (src->sy, src->sx);
f = gdImageGetPixel;
}
dst = gdImageCreateTrueColor(src->sy, src->sx);
@@no-spam -2629,6 +2633,7 @@no-spam double dRadAngle, dSinE, dTan, dShear;
double dOffset; /* Variable skew offset */
int u, iShear, newx, newy;
+ int clrBackR, clrBackG, clrBackB, clrBackA;
/* See GEMS I for the algorithm details */
dRadAngle = dAngle * ROTATE_DEG2RAD; /* Angle in radians */
@@no-spam -2658,6 +2663,7 @@no-spam }

gdImagePaletteCopy (dst1, src);
+
dRadAngle = dAngle * ROTATE_DEG2RAD; /* Angle in radians */
dSinE = sin (dRadAngle);
dTan = tan (dRadAngle / 2.0);
@@no-spam -2674,6 +2680,15 @@no-spam gdImageSkewX(dst1, src, u, iShear, (dShear - iShear), clrBack);
}
+ /*
+ The 1st shear may use the original clrBack as color index + Convert it once here + */
+ clrBackR = gdImageRed(src, clrBack); + clrBackG = gdImageGreen(src, clrBack);
+ clrBackB = gdImageBlue(src, clrBack);
+ clrBackA = gdImageAlpha(src, clrBack);
+ clrBack = gdTrueColorAlpha(clrBackR, clrBackG, clrBackB, clrBackA);
/* 2nd shear */
newx = dst1->sx;

@@no-spam -2686,13 +2701,11 @@no-spam newy = (int) ((double) src->sx * fabs( dSinE ) + (double) src->sy * cos (dRadAngle));

if (src->trueColor) {
- dst2 = gdImageCreateTrueColor (newx, newy);
f = gdImageGetTrueColorPixel;
} else {
- dst2 = gdImageCreate (newx, newy);
f = gdImageGetPixel;
}
-
+ dst2 = gdImageCreateTrueColor(newx, newy);
if (dst2 == NULL) {
gdImageDestroy(dst1);
return NULL;
@@no-spam -2710,13 +2723,11 @@no-spam newy = dst2->sy;
if (src->trueColor) {
- dst3 = gdImageCreateTrueColor (newx, newy);
f = gdImageGetTrueColorPixel;
} else {
- dst3 = gdImageCreate (newx, newy);
f = gdImageGetPixel;
}
-
+ dst3 = gdImageCreateTrueColor(newx, newy);
if (dst3 == NULL) {
gdImageDestroy(dst2);
return NULL;
@@no-spam -2749,7 +2760,6 @@no-spam if (!gdImageTrueColor(src) && clrBack>=gdImageColorsTotal(src)) {
return NULL;
}
-
while (dAngle >= 360.0) {
dAngle -= 360.0;