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);
}
|