mirror of
https://github.com/php/php-src.git
synced 2024-10-14 21:12:35 +00:00
7a8cade379
This initial checkin has no changes to any of the libgd code so it can be used as a basis for diffs. It also will not build currently because of this. The PHP gd checks need to be incorporated along with a bit of other config magic. It also shouldn't break the build and will only take effect if you use --with-gd=php right now.
219 lines
5.1 KiB
C
219 lines
5.1 KiB
C
|
|
|
|
/*
|
|
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
|
|
|
|
----------------------------------------------------------------------------
|
|
*/
|
|
|
|
#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
|
|
*/
|
|
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
|
|
*/
|
|
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
|
|
** ---------------------
|
|
*/
|
|
gdImagePtr
|
|
gdImageCreateFromWBMP (FILE * inFile)
|
|
{
|
|
gdImagePtr im;
|
|
gdIOCtx *in = gdNewFileCtx (inFile);
|
|
im = gdImageCreateFromWBMPCtx (in);
|
|
in->free (in);
|
|
return (im);
|
|
}
|
|
|
|
/* gdImageWBMP
|
|
** -----------
|
|
*/
|
|
void
|
|
gdImageWBMP (gdImagePtr im, int fg, FILE * outFile)
|
|
{
|
|
gdIOCtx *out = gdNewFileCtx (outFile);
|
|
gdImageWBMPCtx (im, fg, out);
|
|
out->free (out);
|
|
}
|
|
|
|
/* gdImageWBMPPtr
|
|
** --------------
|
|
*/
|
|
void *
|
|
gdImageWBMPPtr (gdImagePtr im, int *size, int fg)
|
|
{
|
|
void *rv;
|
|
gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
|
|
gdImageWBMPCtx (im, fg, out);
|
|
rv = gdDPExtractData (out, size);
|
|
out->free (out);
|
|
return rv;
|
|
}
|