|
Packit |
ed3af9 |
#include <stdio.h>
|
|
Packit |
ed3af9 |
#include <limits.h>
|
|
Packit |
ed3af9 |
#include "gd.h"
|
|
Packit |
ed3af9 |
#include "gdtest.h"
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
static int callback(gdImagePtr im, int src)
|
|
Packit |
ed3af9 |
{
|
|
Packit |
ed3af9 |
int r, g, b;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
r = gdImageRed(im, src);
|
|
Packit |
ed3af9 |
g = gdImageGreen(im, src);
|
|
Packit |
ed3af9 |
b = gdImageBlue(im, src);
|
|
Packit |
ed3af9 |
if (b & 0xFF) {
|
|
Packit |
ed3af9 |
return gdImageColorResolve(im, 0x0F & r, 0x0F & g, 0);
|
|
Packit |
ed3af9 |
} else {
|
|
Packit |
ed3af9 |
return -1;
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
static void run_tests(gdImagePtr im, int *error)
|
|
Packit |
ed3af9 |
{
|
|
Packit |
ed3af9 |
int black, \
|
|
Packit |
ed3af9 |
white, \
|
|
Packit |
ed3af9 |
cosmic_latte, \
|
|
Packit |
ed3af9 |
cream, \
|
|
Packit |
ed3af9 |
ivory, \
|
|
Packit |
ed3af9 |
magnolia, \
|
|
Packit |
ed3af9 |
old_lace, \
|
|
Packit |
ed3af9 |
seashell, \
|
|
Packit |
ed3af9 |
yellow, \
|
|
Packit |
ed3af9 |
c, d;
|
|
Packit |
ed3af9 |
int src[2], dst[2];
|
|
Packit |
ed3af9 |
int n;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#define COLOR(name, r, g, b) name = gdImageColorAllocateAlpha(im, r, g, b, gdAlphaOpaque)
|
|
Packit |
ed3af9 |
COLOR(black, 0, 0, 0);
|
|
Packit |
ed3af9 |
COLOR(white, 0xFF, 0xFF, 0xFF);
|
|
Packit |
ed3af9 |
COLOR(cosmic_latte, 0xFF, 0xF8, 0xE7);
|
|
Packit |
ed3af9 |
COLOR(cream, 0xFF, 0xFD, 0xD0);
|
|
Packit |
ed3af9 |
COLOR(ivory, 0xFF, 0xFF, 0xF0);
|
|
Packit |
ed3af9 |
COLOR(magnolia, 0xF8, 0xF4, 0xFF);
|
|
Packit |
ed3af9 |
COLOR(old_lace, 0xFD, 0xF5, 0xE6);
|
|
Packit |
ed3af9 |
COLOR(seashell, 0xFF, 0xF5, 0xEE);
|
|
Packit |
ed3af9 |
COLOR(yellow, 0xFF, 0xFF, 0);
|
|
Packit |
ed3af9 |
#undef COLOR
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#define CHECK_VALUE(n, expected) do { \
|
|
Packit |
ed3af9 |
if (gdTestAssert((n) == (expected)) != 1) { \
|
|
Packit |
ed3af9 |
gdTestErrorMsg("%d is expected, but %d\n", expected, n);\
|
|
Packit |
ed3af9 |
*error = -1; \
|
|
Packit |
ed3af9 |
} \
|
|
Packit |
ed3af9 |
} while (0)
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#define CHECK_PIXEL(x, y, expected) \
|
|
Packit |
ed3af9 |
do { \
|
|
Packit |
ed3af9 |
int pix; \
|
|
Packit |
ed3af9 |
gdImageSetClip(im, 0, 0, 4, 4); \
|
|
Packit |
ed3af9 |
pix = gdImageGetPixel(im, (x), (y)); \
|
|
Packit |
ed3af9 |
if (gdTestAssert(pix == (expected)) != 1) { \
|
|
Packit |
ed3af9 |
gdTestErrorMsg("%d is expected, but %d\n", expected, pix); \
|
|
Packit |
ed3af9 |
*error = -1; \
|
|
Packit |
ed3af9 |
} \
|
|
Packit |
ed3af9 |
} while (0)
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
c = gdImageColorAllocate(im, 0xFF, 0, 0xFF);
|
|
Packit |
ed3af9 |
gdImageFilledRectangle(im, 0, 0, 4, 4, white);
|
|
Packit |
ed3af9 |
gdImageFilledRectangle(im, 0, 0, 3, 3, black);
|
|
Packit |
ed3af9 |
n = gdImageColorReplace(im, white, c);
|
|
Packit |
ed3af9 |
CHECK_VALUE(n, 9);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(0, 0, black);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(2, 3, black);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(4, 4, c);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
gdImageSetClip(im, 1, 1, 3, 3);
|
|
Packit |
ed3af9 |
n = gdImageColorReplace(im, black, c);
|
|
Packit |
ed3af9 |
CHECK_VALUE(n, 9);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(0, 0, black);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(2, 3, c);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
src[0] = black;
|
|
Packit |
ed3af9 |
src[1] = c;
|
|
Packit |
ed3af9 |
dst[0] = c;
|
|
Packit |
ed3af9 |
dst[1] = white;
|
|
Packit |
ed3af9 |
gdImageSetClip(im, 0, 0, 4, 4);
|
|
Packit |
ed3af9 |
n = gdImageColorReplaceArray(im, 2, src, dst);
|
|
Packit |
ed3af9 |
CHECK_VALUE(n, 25);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(0, 0, c);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(2, 3, white);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(4, 4, white);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
n = gdImageColorReplaceArray(im, 0, src, dst);
|
|
Packit |
ed3af9 |
CHECK_VALUE(n, 0);
|
|
Packit |
ed3af9 |
n = gdImageColorReplaceArray(im, -1, src, dst);
|
|
Packit |
ed3af9 |
CHECK_VALUE(n, 0);
|
|
Packit |
ed3af9 |
n = gdImageColorReplaceArray(im, INT_MAX, src, dst);
|
|
Packit |
ed3af9 |
CHECK_VALUE(n, -1);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
gdImageSetClip(im, 1, 1, 4, 4);
|
|
Packit |
ed3af9 |
n = gdImageColorReplaceCallback(im, callback);
|
|
Packit |
ed3af9 |
CHECK_VALUE(n, 16);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(0, 0, c);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(0, 4, white);
|
|
Packit |
ed3af9 |
d = gdImageColorExact(im, 0x0F, 0x0F, 0);
|
|
Packit |
ed3af9 |
if (gdTestAssert(d > 0) != 1) {
|
|
Packit |
ed3af9 |
*error = -1;
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
CHECK_PIXEL(2, 3, d);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(4, 4, d);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#define INITIALIZE_IMAGE() \
|
|
Packit |
ed3af9 |
gdImageSetClip(im, 0, 0, 4, 4); \
|
|
Packit |
ed3af9 |
gdImageFilledRectangle(im, 0, 0, 4, 4, black); \
|
|
Packit |
ed3af9 |
gdImageFilledRectangle(im, 1, 1, 3, 3, white); \
|
|
Packit |
ed3af9 |
gdImageSetPixel(im, 1, 1, cosmic_latte); \
|
|
Packit |
ed3af9 |
gdImageSetPixel(im, 1, 2, cream); \
|
|
Packit |
ed3af9 |
gdImageSetPixel(im, 2, 1, ivory); \
|
|
Packit |
ed3af9 |
gdImageSetPixel(im, 2, 2, magnolia); \
|
|
Packit |
ed3af9 |
gdImageSetPixel(im, 3, 1, old_lace); \
|
|
Packit |
ed3af9 |
gdImageSetPixel(im, 3, 2, seashell)
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
INITIALIZE_IMAGE();
|
|
Packit |
ed3af9 |
n = gdImageColorReplaceThreshold(im, white, yellow, 2.0);
|
|
Packit |
ed3af9 |
CHECK_VALUE(n, 9);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(0, 0, black);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(1, 1, yellow);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(2, 2, yellow);
|
|
Packit |
ed3af9 |
CHECK_PIXEL(3, 3, yellow);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
#undef INITIALIZE_IMAGE
|
|
Packit |
ed3af9 |
#undef CHECK_VALUE
|
|
Packit |
ed3af9 |
#undef CHECK_PIXEL
|
|
Packit |
ed3af9 |
}
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
int main()
|
|
Packit |
ed3af9 |
{
|
|
Packit |
ed3af9 |
gdImagePtr im;
|
|
Packit |
ed3af9 |
int error = 0;
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
gdSetErrorMethod(gdSilence);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
/* true color */
|
|
Packit |
ed3af9 |
im = gdImageCreateTrueColor(5, 5);
|
|
Packit |
ed3af9 |
run_tests(im, &error);
|
|
Packit |
ed3af9 |
gdImageDestroy(im);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
/* palette */
|
|
Packit |
ed3af9 |
im = gdImageCreate(5, 5);
|
|
Packit |
ed3af9 |
run_tests(im, &error);
|
|
Packit |
ed3af9 |
gdImageDestroy(im);
|
|
Packit |
ed3af9 |
|
|
Packit |
ed3af9 |
return error;
|
|
Packit |
ed3af9 |
}
|