summaryrefslogtreecommitdiff
path: root/Build/source/libs/gd/libgd-src/src/gd_wbmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/gd/libgd-src/src/gd_wbmp.c')
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_wbmp.c266
1 files changed, 266 insertions, 0 deletions
diff --git a/Build/source/libs/gd/libgd-src/src/gd_wbmp.c b/Build/source/libs/gd/libgd-src/src/gd_wbmp.c
new file mode 100644
index 00000000000..53fbdc2d1a8
--- /dev/null
+++ b/Build/source/libs/gd/libgd-src/src/gd_wbmp.c
@@ -0,0 +1,266 @@
+/*
+ * 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 of 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 "gd_errors.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) {
+ gd_error("Could not create WBMP\n");
+ return;
+ }
+
+ /* 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)) {
+ gd_error("Could not save WBMP\n");
+ }
+
+ /* des submitted this bugfix: gdFree the memory. */
+ freewbmp(wbmp);
+}
+
+/*
+ Function: gdImageCreateFromWBMPCtx
+
+ Reads in a WBMP image via a <gdIOCtx> struct. See
+ <gdImageCreateFromWBMP>.
+*/
+BGD_DECLARE(gdImagePtr) gdImageCreateFromWBMPCtx(gdIOCtx *infile)
+{
+ 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;
+}
+
+
+/*
+ Function: gdImageCreateFromWBMP
+
+ <gdImageCreateFromWBMP> is called to load images from WBMP format
+ files. Invoke <gdImageCreateFromWBMP> with an already opened
+ pointer to a file containing the desired
+ image. <gdImageCreateFromWBMP> returns a gdImagePtr to the new
+ image, or NULL if unable to load the image (most often because the
+ file is corrupt or does not contain a WBMP
+ image). <gdImageCreateFromWBMP> does not close the file. You can
+ inspect the sx and sy members of the image to determine its
+ size. The image must eventually be destroyed using
+ <gdImageDestroy>.
+
+ Variants:
+
+ <gdImageCreateFromWBMPPtr> creates an image from WBMP data (i.e. the
+ contents of a WBMP file) already in memory.
+
+ <gdImageCreateFromWBMPCtx> reads in an image using the functions in
+ a <gdIOCtx> struct.
+
+ Parameters:
+
+ infile - The input FILE pointer
+
+ Returns:
+
+ A pointer to the new image or NULL if an error occurred.
+
+ Example:
+
+ > gdImagePtr im;
+ > FILE *in;
+ > in = fopen("mywbmp.wbmp", "rb");
+ > im = gdImageCreateFromWBMP(in);
+ > fclose(in);
+ > // ... Use the image ...
+ > gdImageDestroy(im);
+
+*/
+
+BGD_DECLARE(gdImagePtr) gdImageCreateFromWBMP(FILE *inFile)
+{
+ gdImagePtr im;
+ gdIOCtx *in = gdNewFileCtx(inFile);
+ if (in == NULL) return NULL;
+ im = gdImageCreateFromWBMPCtx(in);
+ in->gd_free(in);
+ return im;
+}
+
+
+/*
+ Function: gdImageCreateFromWBMPPtr
+
+ Parameters:
+
+ size - size of WBMP data in bytes.
+ data - WBMP data (i.e. contents of a WBMP file).
+
+ See <gdImageCreateFromWBMP>.
+*/
+BGD_DECLARE(gdImagePtr) gdImageCreateFromWBMPPtr(int size, void *data)
+{
+ gdImagePtr im;
+ gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
+ if(!in) {
+ return 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);
+ if (out == NULL) return;
+ 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);
+ if (out == NULL) return NULL;
+ gdImageWBMPCtx(im, fg, out);
+ rv = gdDPExtractData(out, size);
+ out->gd_free(out);
+ return rv;
+}