summaryrefslogtreecommitdiff
path: root/Build/source/libs/gd/gd-2.0.35/gd_wbmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/gd/gd-2.0.35/gd_wbmp.c')
-rw-r--r--Build/source/libs/gd/gd-2.0.35/gd_wbmp.c230
1 files changed, 230 insertions, 0 deletions
diff --git a/Build/source/libs/gd/gd-2.0.35/gd_wbmp.c b/Build/source/libs/gd/gd-2.0.35/gd_wbmp.c
new file mode 100644
index 00000000000..d9190d2a693
--- /dev/null
+++ b/Build/source/libs/gd/gd-2.0.35/gd_wbmp.c
@@ -0,0 +1,230 @@
+
+
+/*
+ WBMP: Wireless Bitmap Type 0: B/W, Uncompressed Bitmap
+ Specification of the WBMP format can be found in the file:
+ SPEC-WAESpec-19990524.pdf
+ You can download the WAP specification on: http://www.wapforum.com/
+
+ gd_wbmp.c
+
+ Copyright (C) Johan Van den Brande (johan@vandenbrande.com)
+
+ Fixed: gdImageWBMPPtr, gdImageWBMP
+
+ Recoded: gdImageWBMPCtx for use with my wbmp library
+ (wbmp library included, but you can find the latest distribution
+ at http://www.vandenbrande.com/wbmp)
+
+ Implemented: gdImageCreateFromWBMPCtx, gdImageCreateFromWBMP
+
+ ---------------------------------------------------------------------------
+
+ Parts of this code are from Maurice Smurlo.
+
+
+ ** Copyright (C) Maurice Szmurlo --- T-SIT --- January 2000
+ ** (Maurice.Szmurlo@info.unicaen.fr)
+
+ ** Permission to use, copy, modify, and distribute this software and its
+ ** documentation for any purpose and without fee is hereby granted, provided
+ ** that the above copyright notice appear in all copies and that both that
+ ** copyright notice and this permission notice appear in supporting
+ ** documentation. This software is provided "as is" without express or
+ ** implied warranty.
+
+ ---------------------------------------------------------------------------
+ Parts od this code are inspired by 'pbmtowbmp.c' and 'wbmptopbm.c' by
+ Terje Sannum <terje@looplab.com>.
+ **
+ ** Permission to use, copy, modify, and distribute this software and its
+ ** documentation for any purpose and without fee is hereby granted, provided
+ ** that the above copyright notice appear in all copies and that both that
+ ** copyright notice and this permission notice appear in supporting
+ ** documentation. This software is provided "as is" without express or
+ ** implied warranty.
+ **
+ ---------------------------------------------------------------------------
+
+ Todo:
+
+ gdCreateFromWBMP function for reading WBMP files
+
+ ----------------------------------------------------------------------------
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gd.h>
+#include <gdfonts.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#include "wbmp.h"
+
+
+/* gd_putout
+ ** ---------
+ ** Wrapper around gdPutC for use with writewbmp
+ **
+ */
+void
+gd_putout (int i, void *out)
+{
+ gdPutC (i, (gdIOCtx *) out);
+}
+
+
+/* gd_getin
+ ** --------
+ ** Wrapper around gdGetC for use with readwbmp
+ **
+ */
+int
+gd_getin (void *in)
+{
+ return (gdGetC ((gdIOCtx *) in));
+}
+
+
+/* gdImageWBMPCtx
+ ** --------------
+ ** Write the image as a wbmp file
+ ** Parameters are:
+ ** image: gd image structure;
+ ** fg: the index of the foreground color. any other value will be
+ ** considered as background and will not be written
+ ** out: the stream where to write
+ */
+BGD_DECLARE(void) gdImageWBMPCtx (gdImagePtr image, int fg, gdIOCtx * out)
+{
+
+ int x, y, pos;
+ Wbmp *wbmp;
+
+
+ /* create the WBMP */
+ if ((wbmp =
+ createwbmp (gdImageSX (image), gdImageSY (image), WBMP_WHITE)) == NULL)
+ fprintf (stderr, "Could not create WBMP\n");
+
+ /* fill up the WBMP structure */
+ pos = 0;
+ for (y = 0; y < gdImageSY (image); y++)
+ {
+ for (x = 0; x < gdImageSX (image); x++)
+ {
+ if (gdImageGetPixel (image, x, y) == fg)
+ {
+ wbmp->bitmap[pos] = WBMP_BLACK;
+ }
+ pos++;
+ }
+ }
+
+ /* write the WBMP to a gd file descriptor */
+ if (writewbmp (wbmp, &gd_putout, out))
+ fprintf (stderr, "Could not save WBMP\n");
+ /* des submitted this bugfix: gdFree the memory. */
+ freewbmp (wbmp);
+}
+
+
+/* gdImageCreateFromWBMPCtx
+ ** ------------------------
+ ** Create a gdImage from a WBMP file input from an gdIOCtx
+ */
+BGD_DECLARE(gdImagePtr) gdImageCreateFromWBMPCtx (gdIOCtx * infile)
+{
+ /* FILE *wbmp_file; */
+ Wbmp *wbmp;
+ gdImagePtr im = NULL;
+ int black, white;
+ int col, row, pos;
+
+ if (readwbmp (&gd_getin, infile, &wbmp))
+ return (NULL);
+
+ if (!(im = gdImageCreate (wbmp->width, wbmp->height)))
+ {
+ freewbmp (wbmp);
+ return (NULL);
+ }
+
+ /* create the background color */
+ white = gdImageColorAllocate (im, 255, 255, 255);
+ /* create foreground color */
+ black = gdImageColorAllocate (im, 0, 0, 0);
+
+ /* fill in image (in a wbmp 1 = white/ 0 = black) */
+ pos = 0;
+ for (row = 0; row < wbmp->height; row++)
+ {
+ for (col = 0; col < wbmp->width; col++)
+ {
+ if (wbmp->bitmap[pos++] == WBMP_WHITE)
+ {
+ gdImageSetPixel (im, col, row, white);
+ }
+ else
+ {
+ gdImageSetPixel (im, col, row, black);
+ }
+ }
+ }
+
+ freewbmp (wbmp);
+
+ return (im);
+}
+
+
+/* gdImageCreateFromWBMP
+ ** ---------------------
+ */
+BGD_DECLARE(gdImagePtr) gdImageCreateFromWBMP (FILE * inFile)
+{
+ gdImagePtr im;
+ gdIOCtx *in = gdNewFileCtx (inFile);
+ im = gdImageCreateFromWBMPCtx (in);
+ in->gd_free (in);
+ return (im);
+}
+
+BGD_DECLARE(gdImagePtr) gdImageCreateFromWBMPPtr (int size, void *data)
+{
+ gdImagePtr im;
+ gdIOCtx *in = gdNewDynamicCtxEx (size, data, 0);
+ im = gdImageCreateFromWBMPCtx (in);
+ in->gd_free (in);
+ return im;
+}
+
+/* gdImageWBMP
+ ** -----------
+ */
+BGD_DECLARE(void) gdImageWBMP (gdImagePtr im, int fg, FILE * outFile)
+{
+ gdIOCtx *out = gdNewFileCtx (outFile);
+ gdImageWBMPCtx (im, fg, out);
+ out->gd_free (out);
+}
+
+/* gdImageWBMPPtr
+ ** --------------
+ */
+BGD_DECLARE(void *)
+gdImageWBMPPtr (gdImagePtr im, int *size, int fg)
+{
+ void *rv;
+ gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
+ gdImageWBMPCtx (im, fg, out);
+ rv = gdDPExtractData (out, size);
+ out->gd_free (out);
+ return rv;
+}
+
+