summaryrefslogtreecommitdiffstats
path: root/libmscgen/gd_lodepng.c
blob: b8ed22b96a57ad65e401e596a46c71b755da96ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "gd.h"
#include "lodepng.h"

BGD_DECLARE(void) gdImagePng (gdImagePtr im, FILE * outFile)
{
  unsigned char *buffer;
  size_t bufferSize;
  int **ptpixels = im->tpixels;
  unsigned char *pixelBuffer = (unsigned char *)malloc(3*im->sx*im->sy);
  unsigned char *pOut = pixelBuffer;
  int x,y;
  for (y=0;y<im->sy;y++)
  {
    int *pThisRow = *ptpixels++;
    for (x=0;x<im->sx;x++)
    {
      int thisPixel = *pThisRow++;
      *pOut++ = gdTrueColorGetRed(thisPixel);
      *pOut++ = gdTrueColorGetGreen(thisPixel);
      *pOut++ = gdTrueColorGetBlue(thisPixel);
    }
  }
  // TODO: convert ptPixels into pixelBuffer...
  LodePNG_Encoder encoder;
  LodePNG_Encoder_init(&encoder);
  encoder.infoPng.color.colorType = 2; // 2=RGB 24 bit
  encoder.infoRaw.color.colorType = 2; // 2=RGB 24 bit
  LodePNG_encode(&encoder, &buffer, &bufferSize, pixelBuffer, im->sx, im->sy);
  // write bufferSize bytes from buffer into outFile
  fwrite(buffer,1,bufferSize,outFile);
  LodePNG_Encoder_cleanup(&encoder);
  free(buffer);
  free(pixelBuffer);
}