src/lib/pngwrite.c 1.4

1.4 2010/06/05 19:29:53 braney
add support for 32-bit color (make USE_PNG have global consequence)
Index: src/lib/pngwrite.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/lib/pngwrite.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -b -B -U 4 -r1.3 -r1.4
--- src/lib/pngwrite.c	1 Nov 2009 01:11:13 -0000	1.3
+++ src/lib/pngwrite.c	5 Jun 2010 19:29:53 -0000	1.4
@@ -60,14 +60,20 @@
     }
 
 // Configure PNG output params:
 png_init_io(png, png_file);
+#ifdef COLOR32
+png_set_IHDR(png, info, mg->width, mg->height, 8, // 8=bit_depth
+             PNG_COLOR_TYPE_RGBA, PNG_INTERLACE_NONE,
+             PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
+#else
 png_set_IHDR(png, info, mg->width, mg->height, 8, // 8=bit_depth
 	     PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE,
 	     PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
 png_set_PLTE(png, info,
 	     (png_color *)(mg->colorMap), // png_color is same as struct rgbColor!
 	     mg->colorsUsed);
+#endif
 if (useTransparency)
     {
     // First palette color is assumed to be background/transparent, so
     // that's the only one we need in the parallel array opacities[].
@@ -79,12 +85,13 @@
 
 // Write header/params, write pixels, close and clean up.
 // PNG wants a 2D array of pointers to byte offsets into palette/colorMap.
 // mg has a 1D array of byte offsets.  Make row pointers for PNG:
+
 png_byte **row_pointers = needMem(mg->height * sizeof(png_byte *));
 int i;
 for (i = 0;  i < mg->height;  i++)
-    row_pointers[i] = &(mg->pixels[i*mg->width]);
+    row_pointers[i] = (unsigned char *)&(mg->pixels[i*mg->width]);
 png_set_rows(png, info, row_pointers);
 png_write_png(png, info, PNG_TRANSFORM_IDENTITY, // no transform
 	      NULL); // unused as of PNG 1.2
 png_destroy_write_struct(&png, &info);