Merged in suetanvil/gd-libgd/scale-palette-image-bug (pull request #16)

Fix for #97
This commit is contained in:
Chris Reuter 2013-10-23 12:40:25 -04:00
commit 3884557700
4 changed files with 58 additions and 1 deletions

3
.gitignore vendored
View File

@ -204,3 +204,6 @@ Makefile.in
/tests/gdimagerotate/bug00067
/tests/gdimageline/gdImageAALine_thickness
/tests/gdimageline/gdimageline_bug5
/tests/gdinterpolatedscale/gdTrivialResize
/tests/gdinterpolatedscale/gdModesAndPalettes

View File

@ -1075,6 +1075,11 @@ gdImageScaleTwoPass(const gdImagePtr src, const unsigned int new_width,
return gdImageClone(src);
}/* if */
/* Convert to truecolor if it isn't; this code requires it. */
if (!src->trueColor) {
gdImagePaletteToTrueColor(src);
}/* if */
/* Scale horizontally unless sizes are the same. */
if (src_width == new_width) {
tmp_im = src;

View File

@ -29,7 +29,8 @@ check_PROGRAMS = \
gif/bug00181 \
gif/bug00227 \
bmp/bmp_null \
gdinterpolatedscale/gdTrivialResize
gdinterpolatedscale/gdTrivialResize \
gdinterpolatedscale/gdModesAndPalettes
EXTRA_PROGRAMS = \
gdimagestringft/gdimagestringft_bbox \

View File

@ -0,0 +1,48 @@
/* Exercise all scaling with all interpolation modes and ensure that
* at least, something comes back. */
#include <stdio.h>
#include "gd.h"
#include "gdtest.h"
#define X 100
#define Y 100
#define NX 20
#define NY 20
int main() {
int method, i;
for(method = GD_BELL; method <= GD_TRIANGLE; method++) { /* GD_WEIGHTED4 is unsupported. */
gdImagePtr im[2];
// printf("Method = %d\n", method);
im[0] = gdImageCreateTrueColor(X, Y);
im[1] = gdImageCreatePalette(X, Y);
for (i = 0; i < 2; i++) {
gdImagePtr result;
// printf(" %s\n", i == 0 ? "truecolor" : "palette");
gdImageFilledRectangle(im[i], 0, 0, X-1, Y-1,
gdImageColorExactAlpha(im[i], 255, 255, 255, 0));
gdImageSetInterpolationMethod(im[i], method);
gdTestAssert(im[i]->interpolation_id == method); /* No getter yet. */
result = gdImageScale(im[i], NX, NY);
gdTestAssert(result != NULL);
gdTestAssert(result != im[i]);
gdTestAssert(result->sx == NX && result->sy == NY);
gdImageDestroy(result);
gdImageDestroy(im[i]);
}/* for */
}/* for*/
return gdNumFailures();
}/* main*/