diff options
Diffstat (limited to 'Build/source/libs/gd/libgd-2.1.1/src/gdtest.c')
-rw-r--r-- | Build/source/libs/gd/libgd-2.1.1/src/gdtest.c | 395 |
1 files changed, 395 insertions, 0 deletions
diff --git a/Build/source/libs/gd/libgd-2.1.1/src/gdtest.c b/Build/source/libs/gd/libgd-2.1.1/src/gdtest.c new file mode 100644 index 00000000000..17dfc1bc521 --- /dev/null +++ b/Build/source/libs/gd/libgd-2.1.1/src/gdtest.c @@ -0,0 +1,395 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdio.h> +#include <stdlib.h> +#ifdef _WIN32 +#include <process.h> +int +unlink (const char *filename) +{ + return _unlink (filename); +} +#else +#include <unistd.h> /* for getpid(), unlink() */ +#endif +#include "gd.h" + +void CompareImages (char *msg, gdImagePtr im1, gdImagePtr im2); + +static int freadWrapper (void *context, char *buf, int len); +static int fwriteWrapper (void *context, const char *buffer, int len); + +int +main (int argc, char **argv) +{ +#ifdef HAVE_LIBPNG + gdImagePtr im, ref, im2, im3; + FILE *in, *out; + void *iptr; + int sz; + char of[256]; + int colRed, colBlu; + gdSource imgsrc; + gdSink imgsnk; + int foreground; + int i; + if (argc != 2) { + fprintf(stderr, "Usage: gdtest filename.png\n"); + exit (1); + } + in = fopen (argv[1], "rb"); + if (!in) { + fprintf(stderr, "Input file does not exist!\n"); + exit (1); + } + im = gdImageCreateFromPng (in); + + rewind (in); + ref = gdImageCreateFromPng (in); + + fclose (in); + + printf ("Reference File has %d Palette entries\n", ref->colorsTotal); + + CompareImages ("Initial Versions", ref, im); + + + /* */ + /* Send to PNG File then Ptr */ + /* */ +#ifdef VMS + sprintf (of, "%s-png", argv[1]); +#else + sprintf (of, "%s.png", argv[1]); +#endif + out = fopen (of, "wb"); + gdImagePng (im, out); + fclose (out); + + in = fopen (of, "rb"); + if (!in) { + fprintf(stderr, "PNG Output file does not exist!\n"); + exit (1); + } + im2 = gdImageCreateFromPng (in); + fclose (in); + + CompareImages ("GD->PNG File->GD", ref, im2); + + unlink (of); + gdImageDestroy (im2); + + /* 2.0.21: use the new From*Ptr functions */ + iptr = gdImagePngPtr (im, &sz); + im2 = gdImageCreateFromPngPtr (sz, iptr); + gdFree (iptr); + CompareImages ("GD->PNG ptr->GD", ref, im2); + + gdImageDestroy (im2); + + /* */ + /* Send to GD2 File then Ptr */ + /* */ +#ifdef VMS + sprintf (of, "%s-gd2", argv[1]); +#else + sprintf (of, "%s.gd2", argv[1]); +#endif + out = fopen (of, "wb"); + gdImageGd2 (im, out, 128, 2); + fclose (out); + + in = fopen (of, "rb"); + if (!in) { + fprintf(stderr, "GD2 Output file does not exist!\n"); + exit (1); + } + im2 = gdImageCreateFromGd2 (in); + fclose (in); + + CompareImages ("GD->GD2 File->GD", ref, im2); + + unlink (of); + gdImageDestroy (im2); + + iptr = gdImageGd2Ptr (im, 128, 2, &sz); + /*printf("Got ptr %d (size %d)\n",iptr, sz); */ + im2 = gdImageCreateFromGd2Ptr (sz, iptr); + gdFree (iptr); + /*printf("Got img2 %d\n",im2); */ + + CompareImages ("GD->GD2 ptr->GD", ref, im2); + + gdImageDestroy (im2); + + /* */ + /* Send to GD File then Ptr */ + /* */ +#ifdef VMS + sprintf (of, "%s-gd", argv[1]); +#else + sprintf (of, "%s.gd", argv[1]); +#endif + out = fopen (of, "wb"); + gdImageGd (im, out); + fclose (out); + + in = fopen (of, "rb"); + if (!in) { + fprintf(stderr, "GD Output file does not exist!\n"); + exit (1); + } + im2 = gdImageCreateFromGd (in); + fclose (in); + + CompareImages ("GD->GD File->GD", ref, im2); + + unlink (of); + gdImageDestroy (im2); + + iptr = gdImageGdPtr (im, &sz); + /*printf("Got ptr %d (size %d)\n",iptr, sz); */ + im2 = gdImageCreateFromGdPtr (sz, iptr); + gdFree (iptr); + /*printf("Got img2 %d\n",im2); */ + + CompareImages ("GD->GD ptr->GD", ref, im2); + + gdImageDestroy (im2); + + /* + * Test gdImageCreateFromPngSource' + */ + + in = fopen (argv[1], "rb"); + + imgsrc.source = freadWrapper; + imgsrc.context = in; + im2 = gdImageCreateFromPngSource (&imgsrc); + fclose (in); + + if (im2 == NULL) { + printf + ("GD Source: ERROR Null returned by gdImageCreateFromPngSource\n"); + } else { + CompareImages ("GD Source", ref, im2); + gdImageDestroy (im2); + }; + + + /* + * Test gdImagePngToSink' + */ +#ifdef VMS + sprintf (of, "%s-snk", argv[1]); +#else + sprintf (of, "%s.snk", argv[1]); +#endif + out = fopen (of, "wb"); + imgsnk.sink = fwriteWrapper; + imgsnk.context = out; + gdImagePngToSink (im, &imgsnk); + fclose (out); + in = fopen (of, "rb"); + if (!in) { + fprintf (stderr, + "GD Sink: ERROR - GD Sink Output file does not exist!\n"); + } else { + im2 = gdImageCreateFromPng (in); + fclose (in); + + CompareImages ("GD Sink", ref, im2); + gdImageDestroy (im2); + }; + + unlink (of); + + /* */ + /* Test Extraction */ + /* */ + in = fopen ("test/gdtest_200_300_150_100.png", "rb"); + if (!in) { + fprintf(stderr, "gdtest_200_300_150_100.png does not exist!\n"); + exit (1); + } + im2 = gdImageCreateFromPng (in); + fclose (in); + + + in = fopen ("test/gdtest.gd2", "rb"); + if (!in) { + fprintf(stderr, "gdtest.gd2 does not exist!\n"); + exit (1); + } + im3 = gdImageCreateFromGd2Part (in, 200, 300, 150, 100); + fclose (in); + + CompareImages ("GD2Part (gdtest_200_300_150_100.png, gdtest.gd2(part))", + im2, im3); + + gdImageDestroy (im2); + gdImageDestroy (im3); + + /* */ + /* Copy Blend */ + /* */ + in = fopen ("test/gdtest.png", "rb"); + if (!in) { + fprintf(stderr, "gdtest.png does not exist!\n"); + exit (1); + } + im2 = gdImageCreateFromPng (in); + fclose (in); + + im3 = gdImageCreate (100, 60); + colRed = gdImageColorAllocate (im3, 255, 0, 0); + colBlu = gdImageColorAllocate (im3, 0, 0, 255); + gdImageFilledRectangle (im3, 0, 0, 49, 30, colRed); + gdImageFilledRectangle (im3, 50, 30, 99, 59, colBlu); + + gdImageCopyMerge (im2, im3, 150, 200, 10, 10, 90, 50, 50); + gdImageCopyMerge (im2, im3, 180, 70, 10, 10, 90, 50, 50); + + gdImageCopyMergeGray (im2, im3, 250, 160, 10, 10, 90, 50, 50); + gdImageCopyMergeGray (im2, im3, 80, 70, 10, 10, 90, 50, 50); + + gdImageDestroy (im3); + + in = fopen ("test/gdtest_merge.png", "rb"); + if (!in) { + fprintf(stderr, "gdtest_merge.png does not exist!\n"); + exit (1); + } + im3 = gdImageCreateFromPng (in); + fclose (in); + + printf ("[Merged Image has %d colours]\n", im2->colorsTotal); + CompareImages ("Merged (gdtest.png, gdtest_merge.png)", im2, im3); + + gdImageDestroy (im2); + gdImageDestroy (im3); + +#ifdef HAVE_LIBJPEG + out = fopen ("test/gdtest.jpg", "wb"); + if (!out) { + fprintf(stderr, "Can't create file test/gdtest.jpg.\n"); + exit (1); + } + gdImageJpeg (im, out, -1); + fclose (out); + in = fopen ("test/gdtest.jpg", "rb"); + if (!in) { + fprintf(stderr, "Can't open file test/gdtest.jpg.\n"); + exit (1); + } + im2 = gdImageCreateFromJpeg (in); + fclose (in); + if (!im2) { + fprintf(stderr, "gdImageCreateFromJpeg failed.\n"); + exit (1); + } + gdImageDestroy (im2); + printf ("Created test/gdtest.jpg successfully. Compare this image\n" + "to the input image manually. Some difference must be\n" + "expected as JPEG is a lossy file format.\n"); +#endif /* HAVE_LIBJPEG */ + /* Assume the color closest to black is the foreground + color for the B&W wbmp image. */ + fprintf (stderr, + "NOTE: the WBMP output image will NOT match the original unless the original\n" + "is also black and white. This is OK!\n"); + foreground = gdImageColorClosest (im, 0, 0, 0); + fprintf(stderr, "Foreground index is %d\n", foreground); + if (foreground == -1) { + fprintf(stderr, "Source image has no colors, skipping wbmp test.\n"); + } else { + out = fopen ("test/gdtest.wbmp", "wb"); + if (!out) { + fprintf(stderr, "Can't create file test/gdtest.wbmp.\n"); + exit (1); + } + gdImageWBMP (im, foreground, out); + fclose (out); + in = fopen ("test/gdtest.wbmp", "rb"); + if (!in) { + fprintf(stderr, "Can't open file test/gdtest.wbmp.\n"); + exit (1); + } + im2 = gdImageCreateFromWBMP (in); + fprintf(stderr, "WBMP has %d colors\n", gdImageColorsTotal (im2)); + fprintf(stderr, "WBMP colors are:\n"); + for (i = 0; (i < gdImageColorsTotal (im2)); i++) { + fprintf(stderr, "%02X%02X%02X\n", + gdImageRed (im2, i), + gdImageGreen (im2, i), gdImageBlue (im2, i)); + } + fclose (in); + if (!im2) { + fprintf(stderr, "gdImageCreateFromWBMP failed.\n"); + exit (1); + } + CompareImages ("WBMP test (gdtest.png, gdtest.wbmp)", ref, im2); + out = fopen ("test/gdtest_wbmp_to_png.png", "wb"); + if (!out) { + fprintf (stderr, + "Can't create file test/gdtest_wbmp_to_png.png.\n"); + exit (1); + } + gdImagePng (im2, out); + fclose (out); + gdImageDestroy (im2); + } + gdImageDestroy (im); + gdImageDestroy (ref); +#else + fprintf(stderr, "No PNG library support.\n"); +#endif /* HAVE_LIBPNG */ + + return 0; +} + +void +CompareImages (char *msg, gdImagePtr im1, gdImagePtr im2) +{ + int cmpRes; + + cmpRes = gdImageCompare (im1, im2); + + if (cmpRes & GD_CMP_IMAGE) { + printf ("%%%s: ERROR images differ: BAD\n", msg); + } else if (cmpRes != 0) { + printf ("%%%s: WARNING images differ: WARNING - Probably OK\n", msg); + } else { + printf ("%%%s: OK\n", msg); + return; + } + + if (cmpRes & (GD_CMP_SIZE_X + GD_CMP_SIZE_Y)) { + printf ("-%s: INFO image sizes differ\n", msg); + } + + if (cmpRes & GD_CMP_NUM_COLORS) { + printf ("-%s: INFO number of palette entries differ %d Vs. %d\n", msg, + im1->colorsTotal, im2->colorsTotal); + } + + if (cmpRes & GD_CMP_COLOR) { + printf ("-%s: INFO actual colours of pixels differ\n", msg); + } +} + + +static int +freadWrapper (void *context, char *buf, int len) +{ + int got = fread (buf, 1, len, (FILE *) context); + return got; +} + +static int +fwriteWrapper (void *context, const char *buffer, int len) +{ + return fwrite (buffer, 1, len, (FILE *) context); +} |