Revision: 56247
          http://sourceforge.net/p/brlcad/code/56247
Author:   mohitdaga
Date:     2013-07-27 00:34:12 +0000 (Sat, 27 Jul 2013)
Log Message:
-----------
Added png saving function supporting new icv container

Modified Paths:
--------------
    brlcad/trunk/src/libicv/fileformat.c

Modified: brlcad/trunk/src/libicv/fileformat.c
===================================================================
--- brlcad/trunk/src/libicv/fileformat.c        2013-07-26 23:20:16 UTC (rev 
56246)
+++ brlcad/trunk/src/libicv/fileformat.c        2013-07-27 00:34:12 UTC (rev 
56247)
@@ -182,6 +182,53 @@
 }
 
 HIDDEN int
+png_save(icv_image_t* bif, const char* filename)
+{
+    png_structp png_ptr = NULL;
+    png_infop info_ptr = NULL;
+    int i = 0;
+    int png_color_type = PNG_COLOR_TYPE_RGB;
+    unsigned char *data;
+    FILE *fh;
+
+    fh = fopen(filename, "w");
+    if (UNLIKELY(fh==NULL)) {
+       perror("fdopen");
+       bu_log("ERROR: png_save failed to get a FILE pointer\n");
+       return 0;
+    }
+
+    data = data2uchar(bif);
+
+    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+    if (UNLIKELY(png_ptr == NULL)) {
+       fclose(fh);
+       return 0;
+    }
+
+    info_ptr = png_create_info_struct(png_ptr);
+    if (info_ptr == NULL || setjmp(png_jmpbuf(png_ptr))) {
+       png_destroy_read_struct(&png_ptr, info_ptr ? &info_ptr : NULL, NULL);
+       bu_log("ERROR: Unable to create png header\n");
+       fclose(fh);
+       return 0;
+    }
+
+    png_init_io(png_ptr, fh);
+    png_set_IHDR(png_ptr, info_ptr, (unsigned)bif->width, 
(unsigned)bif->height, 8, png_color_type,
+                 PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT,
+                 PNG_FILTER_TYPE_DEFAULT);
+    png_write_info(png_ptr, info_ptr);
+    for (i = bif->height-1; i >= 0; --i)
+       png_write_row(png_ptr, (png_bytep) (data + bif->width*bif->channels*i));
+    png_write_end(png_ptr, info_ptr);
+
+    png_destroy_write_struct(&png_ptr, &info_ptr);
+    fclose(fh);
+    return 1;
+}
+
+HIDDEN int
 pix_save(icv_image_t* bif, const char* filename)
 {
     unsigned char *data;
@@ -360,10 +407,10 @@
     switch(format) {
        /* case ICV_IMAGE_BMP:
            return bmp_save(bif, filename);
+       case ICV_IMAGE_PPM:
+           return ppm_save(bif, filename);*/
        case ICV_IMAGE_PNG:
            return png_save(bif, filename);
-       case ICV_IMAGE_PPM:
-           return ppm_save(bif, filename);*/
        case ICV_IMAGE_PIX :
            return pix_save(bif, filename);
        case ICV_IMAGE_BW :

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to