Annotation of embedaddon/php/ext/gd/libgd/gd_wbmp.c, revision 1.1
1.1 ! misho 1: /*
! 2: WBMP: Wireless Bitmap Type 0: B/W, Uncompressed Bitmap
! 3: Specification of the WBMP format can be found in the file:
! 4: SPEC-WAESpec-19990524.pdf
! 5: You can download the WAP specification on: http://www.wapforum.com/
! 6:
! 7: gd_wbmp.c
! 8:
! 9: Copyright (C) Johan Van den Brande (johan@vandenbrande.com)
! 10:
! 11: Fixed: gdImageWBMPPtr, gdImageWBMP
! 12:
! 13: Recoded: gdImageWBMPCtx for use with my wbmp library
! 14: (wbmp library included, but you can find the latest distribution
! 15: at http://www.vandenbrande.com/wbmp)
! 16:
! 17: Implemented: gdImageCreateFromWBMPCtx, gdImageCreateFromWBMP
! 18:
! 19: ---------------------------------------------------------------------------
! 20:
! 21: Parts of this code are from Maurice Smurlo.
! 22:
! 23:
! 24: ** Copyright (C) Maurice Szmurlo --- T-SIT --- January 2000
! 25: ** (Maurice.Szmurlo@info.unicaen.fr)
! 26:
! 27: ** Permission to use, copy, modify, and distribute this software and its
! 28: ** documentation for any purpose and without fee is hereby granted, provided
! 29: ** that the above copyright notice appear in all copies and that both that
! 30: ** copyright notice and this permission notice appear in supporting
! 31: ** documentation. This software is provided "as is" without express or
! 32: ** implied warranty.
! 33:
! 34: ---------------------------------------------------------------------------
! 35: Parts od this code are inspired by 'pbmtowbmp.c' and 'wbmptopbm.c' by
! 36: Terje Sannum <terje@looplab.com>.
! 37: **
! 38: ** Permission to use, copy, modify, and distribute this software and its
! 39: ** documentation for any purpose and without fee is hereby granted, provided
! 40: ** that the above copyright notice appear in all copies and that both that
! 41: ** copyright notice and this permission notice appear in supporting
! 42: ** documentation. This software is provided "as is" without express or
! 43: ** implied warranty.
! 44: **
! 45: ---------------------------------------------------------------------------
! 46:
! 47: Todo:
! 48:
! 49: gdCreateFromWBMP function for reading WBMP files
! 50:
! 51: ----------------------------------------------------------------------------
! 52: */
! 53:
! 54: #include <gd.h>
! 55: #include <gdfonts.h>
! 56: #include <stdio.h>
! 57: #include <stdlib.h>
! 58: #include <limits.h>
! 59:
! 60: #include "wbmp.h"
! 61:
! 62:
! 63: /* gd_putout
! 64: ** ---------
! 65: ** Wrapper around gdPutC for use with writewbmp
! 66: **
! 67: */
! 68: void gd_putout (int i, void *out)
! 69: {
! 70: gdPutC(i, (gdIOCtx *) out);
! 71: }
! 72:
! 73:
! 74: /* gd_getin
! 75: ** --------
! 76: ** Wrapper around gdGetC for use with readwbmp
! 77: **
! 78: */
! 79: int gd_getin (void *in)
! 80: {
! 81: return (gdGetC((gdIOCtx *) in));
! 82: }
! 83:
! 84:
! 85: /* gdImageWBMPCtx
! 86: ** --------------
! 87: ** Write the image as a wbmp file
! 88: ** Parameters are:
! 89: ** image: gd image structure;
! 90: ** fg: the index of the foreground color. any other value will be
! 91: ** considered as background and will not be written
! 92: ** out: the stream where to write
! 93: */
! 94: void gdImageWBMPCtx (gdImagePtr image, int fg, gdIOCtx * out)
! 95: {
! 96: int x, y, pos;
! 97: Wbmp *wbmp;
! 98:
! 99: /* create the WBMP */
! 100: if ((wbmp = createwbmp (gdImageSX (image), gdImageSY (image), WBMP_WHITE)) == NULL) {
! 101: php_gd_error("Could not create WBMP");
! 102: }
! 103:
! 104: /* fill up the WBMP structure */
! 105: pos = 0;
! 106: for (y = 0; y < gdImageSY(image); y++) {
! 107: for (x = 0; x < gdImageSX(image); x++) {
! 108: if (gdImageGetPixel (image, x, y) == fg) {
! 109: wbmp->bitmap[pos] = WBMP_BLACK;
! 110: }
! 111: pos++;
! 112: }
! 113: }
! 114:
! 115: /* write the WBMP to a gd file descriptor */
! 116: if (writewbmp (wbmp, &gd_putout, out)) {
! 117: php_gd_error("Could not save WBMP");
! 118: }
! 119: /* des submitted this bugfix: gdFree the memory. */
! 120: freewbmp(wbmp);
! 121: }
! 122:
! 123: /* gdImageCreateFromWBMPCtx
! 124: ** ------------------------
! 125: ** Create a gdImage from a WBMP file input from an gdIOCtx
! 126: */
! 127: gdImagePtr gdImageCreateFromWBMPCtx (gdIOCtx * infile)
! 128: {
! 129: /* FILE *wbmp_file; */
! 130: Wbmp *wbmp;
! 131: gdImagePtr im = NULL;
! 132: int black, white;
! 133: int col, row, pos;
! 134:
! 135: if (readwbmp (&gd_getin, infile, &wbmp)) {
! 136: return NULL;
! 137: }
! 138:
! 139: if (!(im = gdImageCreate (wbmp->width, wbmp->height))) {
! 140: freewbmp (wbmp);
! 141: return NULL;
! 142: }
! 143:
! 144: /* create the background color */
! 145: white = gdImageColorAllocate(im, 255, 255, 255);
! 146: /* create foreground color */
! 147: black = gdImageColorAllocate(im, 0, 0, 0);
! 148:
! 149: /* fill in image (in a wbmp 1 = white/ 0 = black) */
! 150: pos = 0;
! 151: for (row = 0; row < wbmp->height; row++) {
! 152: for (col = 0; col < wbmp->width; col++) {
! 153: if (wbmp->bitmap[pos++] == WBMP_WHITE) {
! 154: gdImageSetPixel(im, col, row, white);
! 155: } else {
! 156: gdImageSetPixel(im, col, row, black);
! 157: }
! 158: }
! 159: }
! 160:
! 161: freewbmp(wbmp);
! 162:
! 163: return im;
! 164: }
! 165:
! 166: /* gdImageCreateFromWBMP
! 167: ** ---------------------
! 168: */
! 169: gdImagePtr gdImageCreateFromWBMP (FILE * inFile)
! 170: {
! 171: gdImagePtr im;
! 172: gdIOCtx *in = gdNewFileCtx(inFile);
! 173: im = gdImageCreateFromWBMPCtx(in);
! 174: in->gd_free(in);
! 175:
! 176: return im;
! 177: }
! 178:
! 179: gdImagePtr gdImageCreateFromWBMPPtr (int size, void *data)
! 180: {
! 181: gdImagePtr im;
! 182: gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
! 183: im = gdImageCreateFromWBMPCtx(in);
! 184: in->gd_free(in);
! 185: return im;
! 186: }
! 187:
! 188: /* gdImageWBMP
! 189: ** -----------
! 190: */
! 191: void gdImageWBMP (gdImagePtr im, int fg, FILE * outFile)
! 192: {
! 193: gdIOCtx *out = gdNewFileCtx(outFile);
! 194: gdImageWBMPCtx(im, fg, out);
! 195: out->gd_free(out);
! 196: }
! 197:
! 198: /* gdImageWBMPPtr
! 199: ** --------------
! 200: */
! 201: void * gdImageWBMPPtr (gdImagePtr im, int *size, int fg)
! 202: {
! 203: void *rv;
! 204: gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
! 205: gdImageWBMPCtx(im, fg, out);
! 206: rv = gdDPExtractData(out, size);
! 207: out->gd_free(out);
! 208:
! 209: return rv;
! 210: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>