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>