|
Packit |
ed3af9 |
#include "gd.h"
|
|
Packit |
ed3af9 |
#include "gdtest.h"
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#define WIDTH 12
|
|
Packit |
ed3af9 |
#define BLOCK_SIZE 4
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
static const int expected_upperleft[][3] = {
|
|
Packit |
ed3af9 |
{0x000000, 0x040404, 0x080808},
|
|
Packit |
ed3af9 |
{0x303030, 0x343434, 0x383838},
|
|
Packit |
ed3af9 |
{0x606060, 0x646464, 0x686868}
|
|
Packit |
ed3af9 |
};
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
static const int expected_average[][3] = {
|
|
Packit |
ed3af9 |
{0x131313, 0x171717, 0x1b1b1b},
|
|
Packit |
ed3af9 |
{0x434343, 0x474747, 0x4b4b4b},
|
|
Packit |
ed3af9 |
{0x737373, 0x777777, 0x7b7b7b},
|
|
Packit |
ed3af9 |
};
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#define SETUP_PIXELS(im) do { \
|
|
Packit |
ed3af9 |
int x, y, i = 0; \
|
|
Packit |
ed3af9 |
for (y = 0; y < (im)->sy; y++) { \
|
|
Packit |
ed3af9 |
for (x = 0; x < (im)->sx; x++) { \
|
|
Packit |
ed3af9 |
int p = gdImageColorResolve(im, i, i, i); \
|
|
Packit |
ed3af9 |
gdImageSetPixel(im, x, y, p); \
|
|
Packit |
ed3af9 |
i++; \
|
|
Packit |
ed3af9 |
} \
|
|
Packit |
ed3af9 |
} \
|
|
Packit |
ed3af9 |
} while (0)
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#define CHECK_PIXELS(im, expected) do { \
|
|
Packit |
ed3af9 |
int x, y; \
|
|
Packit |
ed3af9 |
for (y = 0; y < (im)->sy; y++) { \
|
|
Packit |
ed3af9 |
for (x = 0; x < (im)->sx; x++) { \
|
|
Packit |
ed3af9 |
int p = gdImageGetPixel(im, x, y); \
|
|
Packit |
ed3af9 |
int r = ((expected)[y/BLOCK_SIZE][x/BLOCK_SIZE]>>16)&0xFF; \
|
|
Packit |
ed3af9 |
int g = ((expected)[y/BLOCK_SIZE][x/BLOCK_SIZE]>> 8)&0xFF; \
|
|
Packit |
ed3af9 |
int b = ((expected)[y/BLOCK_SIZE][x/BLOCK_SIZE] )&0xFF; \
|
|
Packit |
ed3af9 |
if (r != gdImageRed(im, p)) { \
|
|
Packit |
ed3af9 |
gdTestErrorMsg("Red %x is expected, but %x\n", r, gdImageRed(im, p)); \
|
|
Packit |
ed3af9 |
return 0; \
|
|
Packit |
ed3af9 |
} \
|
|
Packit |
ed3af9 |
if (g != gdImageGreen(im, p)) { \
|
|
Packit |
ed3af9 |
gdTestErrorMsg("Green %x is expected, but %x\n", g, gdImageGreen(im, p)); \
|
|
Packit |
ed3af9 |
return 0; \
|
|
Packit |
ed3af9 |
} \
|
|
Packit |
ed3af9 |
if (b != gdImageBlue(im, p)) { \
|
|
Packit |
ed3af9 |
gdTestErrorMsg("Blue %x is expected, but %x\n", b, gdImageBlue(im, p)); \
|
|
Packit |
ed3af9 |
return 0; \
|
|
Packit |
ed3af9 |
} \
|
|
Packit |
ed3af9 |
} \
|
|
Packit |
ed3af9 |
} \
|
|
Packit |
ed3af9 |
} while (0)
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
static int testPixelate(gdImagePtr im)
|
|
Packit |
ed3af9 |
{
|
|
Packit |
ed3af9 |
if (gdImagePixelate(im, -1, GD_PIXELATE_UPPERLEFT) != 0) return 0;
|
|
Packit |
ed3af9 |
if (gdImagePixelate(im, 1, GD_PIXELATE_UPPERLEFT) != 1) return 0;
|
|
Packit |
ed3af9 |
if (gdImagePixelate(im, 2, -1) != 0) return 0;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
SETUP_PIXELS(im);
|
|
Packit |
ed3af9 |
if (!gdImagePixelate(im, BLOCK_SIZE, GD_PIXELATE_UPPERLEFT)) return 0;
|
|
Packit |
ed3af9 |
CHECK_PIXELS(im, expected_upperleft);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
SETUP_PIXELS(im);
|
|
Packit |
ed3af9 |
if (!gdImagePixelate(im, BLOCK_SIZE, GD_PIXELATE_AVERAGE)) return 0;
|
|
Packit |
ed3af9 |
CHECK_PIXELS(im, expected_average);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
return 1;
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
int main()
|
|
Packit |
ed3af9 |
{
|
|
Packit |
ed3af9 |
gdImagePtr im;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
im = gdImageCreate(WIDTH, WIDTH);
|
|
Packit |
ed3af9 |
if (!testPixelate(im)) {
|
|
Packit |
ed3af9 |
return 1;
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
gdImageDestroy(im);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
im = gdImageCreateTrueColor(WIDTH, WIDTH);
|
|
Packit |
ed3af9 |
if (!testPixelate(im)) {
|
|
Packit |
ed3af9 |
return 2;
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
gdImageDestroy(im);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
return 0;
|
|
Packit |
ed3af9 |
}
|