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 @@ -2075,9 +2075,9 @@ } 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); @@ -2368,14 +2368,22 @@ 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; } @@ -2387,8 +2395,6 @@ gdImageSetPixel (dst, i, uRow, clrBack); } - pxlOldLeft = clrBack; - for (i = 0; i < src->sx; i++) { pxlSrc = f (src,i,uRow); @@ -2541,10 +2547,8 @@ 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); @@ -2629,6 +2633,7 @@ 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 */ @@ -2658,6 +2663,7 @@ } gdImagePaletteCopy (dst1, src); + dRadAngle = dAngle * ROTATE_DEG2RAD; /* Angle in radians */ dSinE = sin (dRadAngle); dTan = tan (dRadAngle / 2.0); @@ -2674,6 +2680,15 @@ 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; @@ -2686,13 +2701,11 @@ 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; @@ -2710,13 +2723,11 @@ 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; @@ -2749,7 +2760,6 @@ if (!gdImageTrueColor(src) && clrBack>=gdImageColorsTotal(src)) { return NULL; } - while (dAngle >= 360.0) { dAngle -= 360.0;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php