summaryrefslogtreecommitdiffstats
path: root/libmscgen/gd_lodepng.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmscgen/gd_lodepng.c')
-rw-r--r--libmscgen/gd_lodepng.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/libmscgen/gd_lodepng.c b/libmscgen/gd_lodepng.c
new file mode 100644
index 0000000..b8ed22b
--- /dev/null
+++ b/libmscgen/gd_lodepng.c
@@ -0,0 +1,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);
+}
+