Back to index

tetex-bin  3.0
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

int _gdGetColors (gdIOCtx *in, gdImagePtr im, int gd2xFlag)
static gdImagePtr _gdCreateFromFile (gdIOCtx *in, int *sx, int *sy)
 BGD_DECLARE (gdImagePtr)
void _gdPutColors (gdImagePtr im, gdIOCtx *out)
static void _gdPutHeader (gdImagePtr im, gdIOCtx *out)
static void _gdImageGd (gdImagePtr im, gdIOCtx *out)
 BGD_DECLARE (void)
 BGD_DECLARE (void *)

Define Documentation

#define FALSE   0

Definition at line 12 of file gd_gd.c.

#define GD2_DBG (   s)

Definition at line 17 of file gd_gd.c.

#define TRUE   1

Definition at line 11 of file gd_gd.c.


Function Documentation

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

Definition at line 113 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 (!_gdGetColors (in, im, gd2xFlag))
    {
      goto fail2;
    }

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

Here is the call graph for this function:

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

Definition at line 23 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;
           }
       }
      /* 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 287 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 244 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 267 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:

Definition at line 164 of file gd_gd.c.

{
  gdImagePtr im;
  gdIOCtx *in;

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

  in->gd_free (in);

  return im;
}

Definition at line 310 of file gd_gd.c.

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

Here is the call graph for this function:

BGD_DECLARE ( void )

Definition at line 317 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: