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;
return gdImageRotateBilinear(src, angle, bgcolor);
break;
- case GD_BICUBIC:
- 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);
+ return gdImageRotateBicubicFixed(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;
}