1
0
mirror of https://github.com/php/php-src.git synced 2026-04-09 00:53:30 +02:00

fix generic rotation and 90 degrees & multiples rotation, take #2

This commit is contained in:
Pierre Joye
2013-03-24 16:52:20 +01:00
parent 585f71f497
commit be3e2bb295

View File

@@ -2177,6 +2177,17 @@ gdImagePtr gdImageRotateBicubicFixed(gdImagePtr src, const float degrees, const
gdImagePtr gdImageRotateInterpolated(const gdImagePtr src, const float angle, int bgcolor)
{
const int angle_rounded = (int)floor(angle * 100);
/* no interpolation needed here */
switch (angle_rounded) {
case 9000:
return gdImageRotate90(src, 0);
case 18000:
return gdImageRotate180(src, 0);
case 27000:
return gdImageRotate270(src, 0);
}
if (src == NULL || src->interpolation_id < 1 || src->interpolation_id > GD_METHOD_COUNT) {
return NULL;
@@ -2191,47 +2202,12 @@ gdImagePtr gdImageRotateInterpolated(const gdImagePtr src, const float angle, in
return gdImageRotateBilinear(src, angle, bgcolor);
break;
case GD_BICUBIC:
case GD_BICUBIC_FIXED:
return gdImageRotateBicubicFixed(src, angle, bgcolor);
break;
case GD_BICUBIC_FIXED:
return gdImageRotateNearestNeighbour(src, angle, bgcolor);
break;
case GD_WEIGHTED4:
return gdImageRotateNearestNeighbour(src, angle, bgcolor);
break;
case GD_BSPLINE:
return gdImageRotateNearestNeighbour(src, angle, bgcolor);
break;
case GD_BOX:
return gdImageRotateNearestNeighbour(src, angle, bgcolor);
break;
case GD_HERMITE:
return gdImageRotateNearestNeighbour(src, angle, bgcolor);
break;
case GD_HAMMING:
break;
case GD_SINC:
break;
case GD_BLACKMAN:
break;
case GD_GAUSSIAN:
break;
case GD_QUADRATIC:
break;
case GD_MITCHELL:
break;
case GD_CATMULLROM:
break;
case GD_POWER:
break;
default:
return gdImageRotateGeneric(src, angle, bgcolor);
}
return NULL;
}