File: gd_lodepng.c

package info (click to toggle)
doxygen 1.9.8%2Bds-2.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 24,000 kB
  • sloc: cpp: 215,370; lex: 42,621; python: 32,388; ansic: 26,705; xml: 15,390; javascript: 8,352; yacc: 581; f90: 455; php: 441; perl: 378; makefile: 195; sh: 24; objc: 14; cs: 5; java: 1
file content (35 lines) | stat: -rw-r--r-- 1,048 bytes parent folder | download | duplicates (7)
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);
}