Back to index

php5  5.3.10
Defines | Functions
gd_gd.c File Reference
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "gd.h"

Go to the source code of this file.

Defines

#define TRUE   1
#define FALSE   0
#define GD2_DBG(s)

Functions

void gdImageGd (gdImagePtr im, FILE *out)
int _gdGetColors (gdIOCtx *in, gdImagePtr im, int gd2xFlag)
static gdImagePtr _gdCreateFromFile (gdIOCtx *in, int *sx, int *sy)
gdImagePtr gdImageCreateFromGd (FILE *inFile)
gdImagePtr gdImageCreateFromGdPtr (int size, void *data)
gdImagePtr gdImageCreateFromGdCtx (gdIOCtxPtr in)
void _gdPutColors (gdImagePtr im, gdIOCtx *out)
static void _gdPutHeader (gdImagePtr im, gdIOCtx *out)
static void _gdImageGd (gdImagePtr im, gdIOCtx *out)
void * gdImageGdPtr (gdImagePtr im, int *size)

Define Documentation

#define FALSE   0

Definition at line 8 of file gd_gd.c.

#define GD2_DBG (   s)

Definition at line 17 of file gd_gd.c.

#define TRUE   1

Definition at line 7 of file gd_gd.c.


Function Documentation

static gdImagePtr _gdCreateFromFile ( gdIOCtx in,
int sx,
int sy 
) [static]

Definition at line 97 of file gd_gd.c.

{
       gdImagePtr im;
       int gd2xFlag = 0;
       int trueColorFlag = 0;

       if (!gdGetWord(sx, in)) {
              goto fail1;
       }
       if (*sx == 65535 || *sx == 65534) {
              /* This is a gd 2.0 .gd file */
              gd2xFlag = 1;
              /* 2.0.12: 65534 signals a truecolor .gd file. There is a slight redundancy here but we can live with it. */
              if (*sx == 65534) {
                     trueColorFlag = 1;
              }
              if (!gdGetWord(sx, in)) {
                     goto fail1;
              }
       }
       if (!gdGetWord(sy, in)) {
              goto fail1;
       }

       GD2_DBG(printf("Image is %dx%d\n", *sx, *sy));

       if (trueColorFlag) {
              im = gdImageCreateTrueColor(*sx, *sy);
       } else {
              im = gdImageCreate(*sx, *sy);
       }
       if(!im) {
              goto fail1;
       }
       if (!_gdGetColors(in, im, gd2xFlag)) {
              goto fail2;
       }

       return im;
fail2:
       gdImageDestroy(im);
fail1:
       return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int _gdGetColors ( gdIOCtx in,
gdImagePtr  im,
int  gd2xFlag 
)

Definition at line 22 of file gd_gd.c.

{
       int i;
       if (gd2xFlag) {
              int trueColorFlag;
              if (!gdGetByte(&trueColorFlag, in)) {
                     goto fail1;
              }
              /* 2.0.12: detect bad truecolor .gd files created by pre-2.0.12.
               * Beginning in 2.0.12 truecolor is indicated by the initial 2-byte
               * signature.
               */
              if (trueColorFlag != im->trueColor) {
                     goto fail1;
              }
              /* This should have been a word all along */
              if (!im->trueColor) {
                     if (!gdGetWord(&im->colorsTotal, in)) {
                            goto fail1;
                     }
                     if (im->colorsTotal > gdMaxColors) {
                            goto fail1;
                     }
              }
              /* Int to accommodate truecolor single-color transparency */
              if (!gdGetInt(&im->transparent, in)) {
                     goto fail1;
              }
       } else {
              if (!gdGetByte(&im->colorsTotal, in)) {
                     goto fail1;
              }
              if (!gdGetWord(&im->transparent, in)) {
                     goto fail1;
              }
              if (im->transparent == 257) {
                     im->transparent = (-1);
              }
       }

       GD2_DBG(printf("Pallette had %d colours (T=%d)\n", im->colorsTotal, im->transparent));

       if (im->trueColor) {
              return TRUE;
       }

       for (i = 0; i < gdMaxColors; i++) {
              if (!gdGetByte(&im->red[i], in)) {
                     goto fail1;
              }
              if (!gdGetByte(&im->green[i], in)) {
                     goto fail1;
              }
              if (!gdGetByte(&im->blue[i], in)) {
                     goto fail1;
              }
              if (gd2xFlag) {
                     if (!gdGetByte(&im->alpha[i], in)) {
                            goto fail1;
                     }
              }
       }

       for (i = 0; i < im->colorsTotal; i++) {
              im->open[i] = 0;
       }

       return TRUE;
fail1:
       return FALSE;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void _gdImageGd ( gdImagePtr  im,
gdIOCtx out 
) [static]

Definition at line 247 of file gd_gd.c.

{
       int x, y;

       _gdPutHeader(im, out);

       for (y = 0; y < im->sy; y++) {
              for (x = 0; x < im->sx; x++) {
                     /* ROW-MAJOR IN GD 1.3 */
                     if (im->trueColor) {
                            gdPutInt(im->tpixels[y][x], out);
                     } else {
                            gdPutC((unsigned char) im->pixels[y][x], out);
                     }
              }
       }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void _gdPutColors ( gdImagePtr  im,
gdIOCtx out 
)

Definition at line 212 of file gd_gd.c.

{
       int i;

       gdPutC(im->trueColor, out);
       if (!im->trueColor) {
              gdPutWord(im->colorsTotal, out);
       }
       gdPutInt(im->transparent, out);
       if (!im->trueColor) {
              for (i = 0; i < gdMaxColors; i++) {
                     gdPutC((unsigned char) im->red[i], out);
                     gdPutC((unsigned char) im->green[i], out);
                     gdPutC((unsigned char) im->blue[i], out);
                     gdPutC((unsigned char) im->alpha[i], out);
              }
       }
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void _gdPutHeader ( gdImagePtr  im,
gdIOCtx out 
) [static]

Definition at line 231 of file gd_gd.c.

{
       /* 65535 indicates this is a gd 2.x .gd file.
        * 2.0.12: 65534 indicates truecolor.
        */
       if (im->trueColor) {
              gdPutWord(65534, out);
       } else {
              gdPutWord(65535, out);
       }
       gdPutWord(im->sx, out);
       gdPutWord(im->sy, out);

       _gdPutColors(im, out);
}

Here is the call graph for this function:

Here is the caller graph for this function:

gdImagePtr gdImageCreateFromGd ( FILE *  inFile)

Definition at line 142 of file gd_gd.c.

{
       gdImagePtr im;
       gdIOCtx *in;

       in = gdNewFileCtx(inFile);
       im = gdImageCreateFromGdCtx(in);

       in->gd_free(in);

       return im;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 165 of file gd_gd.c.

{
       int sx, sy;
       int x, y;
       gdImagePtr im;

       /* Read the header */
       im = _gdCreateFromFile(in, &sx, &sy);

       if (im == NULL) {
              goto fail1;
       }

       /* Then the data... */
       /* 2.0.12: support truecolor properly in .gd as well as in .gd2. Problem reported by Andreas Pfaller. */
       if (im->trueColor) {
              for (y = 0; y < sy; y++) {
                     for (x = 0; x < sx; x++) {
                            int pix;
                            if (!gdGetInt(&pix, in)) {
                                   goto fail2;
                            }
                            im->tpixels[y][x] = pix;
                     }
              }
       } else {
              for (y = 0; y < sy; y++) {
                     for (x = 0; x < sx; x++) {
                            int ch;
                            ch = gdGetC(in);
                            if (ch == EOF) {
                                   goto fail2;
                            }
                            /* ROW-MAJOR IN GD 1.3 */
                            im->pixels[y][x] = ch;
                     }
              }
       }

       return im;

fail2:
       gdImageDestroy (im);
fail1:
       return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

gdImagePtr gdImageCreateFromGdPtr ( int  size,
void *  data 
)

Definition at line 155 of file gd_gd.c.

{
       gdImagePtr im;
       gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
       im = gdImageCreateFromGdCtx(in);
       in->gd_free(in);

       return im;
}

Here is the call graph for this function:

void gdImageGd ( gdImagePtr  im,
FILE *  out 
)

Definition at line 265 of file gd_gd.c.

{
       gdIOCtx *out = gdNewFileCtx(outFile);
       _gdImageGd(im, out);
       out->gd_free(out);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void* gdImageGdPtr ( gdImagePtr  im,
int size 
)

Definition at line 272 of file gd_gd.c.

{
       void *rv;
       gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
       _gdImageGd(im, out);
       rv = gdDPExtractData(out, size);
       out->gd_free(out);
       return rv;
}

Here is the call graph for this function:

Here is the caller graph for this function: