libgd/tests/gdimagecrop/bug00485_auto.c

53 lines
1.6 KiB
C

/**
* Test that gdImageCropAuto() works pixel precise
*
* We test that a single black pixel anywhere (but the corners) on an 8x8 pixel
* image with a white background is auto-cropped to a 1x1 pixel image with a
* black pixel.
*
* See <https://github.com/libgd/libgd/issues/485>
*/
#include "gd.h"
#include "gdtest.h"
gdImagePtr createWhiteImageWithBlackPixelAt(int x, int y)
{
gdImagePtr im = gdImageCreateTrueColor(8, 8);
gdImageFilledRectangle(im, 0, 0, 7, 7, 0xffffff);
gdImageSetPixel(im, x, y, 0x000000);
return im;
}
int main()
{
int x, y, height, width, color;
gdImagePtr orig, cropped;
for (y = 0; y < 8; y++) {
for (x = 0; x < 8; x++) {
if ((x == 0 && (y == 0 || y == 7)) || (x == 7 && (y == 0 || y == 7))) {
continue; // skip the corners
}
orig = createWhiteImageWithBlackPixelAt(x, y);
cropped = gdImageCropAuto(orig, GD_CROP_SIDES);
gdTestAssertMsg(cropped != NULL, "Pixel at %d, %d: unexpected NULL crop\n", x, y);
if (cropped) {
width = gdImageSX(cropped);
gdTestAssertMsg(width == 1, "Pixel at %d, %d: unexpected width (%d)\n", x, y, width);
height = gdImageSY(cropped);
gdTestAssertMsg(height == 1, "Pixel at %d, %d: unexpected height (%d)\n", x, y, height);
color = gdImageGetPixel(cropped, 0, 0);
gdTestAssertMsg(color == 0x000000, "Pixel at %d, %d: unexpected color (%d)\n", x, y, color);
gdImageDestroy(cropped);
}
gdImageDestroy(orig);
}
}
return gdNumFailures();
}