---
 frontend/scanimage.c | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/frontend/scanimage.c b/frontend/scanimage.c
index 77c22883..0f71422c 100644
--- a/frontend/scanimage.c
+++ b/frontend/scanimage.c
@@ -56,6 +56,7 @@
 #include "../include/sane/sanei.h"
 #include "../include/sane/saneopts.h"
 
+#include "sicc.h"
 #include "stiff.h"
 
 #include "../include/md5.h"
@@ -1165,9 +1166,11 @@ write_pnm_header (SANE_Frame format, int width, int 
height, int depth, FILE *ofp
 
 #ifdef HAVE_LIBPNG
 static void
-write_png_header (SANE_Frame format, int width, int height, int depth, FILE 
*ofp, png_structp* png_ptr, png_infop* info_ptr)
+write_png_header (SANE_Frame format, int width, int height, int depth, const 
char * icc_profile, FILE *ofp, png_structp* png_ptr, png_infop* info_ptr)
 {
   int color_type;
+  size_t icc_size = 0;
+  void *icc_buffer;
 
   *png_ptr = png_create_write_struct
        (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
@@ -1200,6 +1203,16 @@ write_png_header (SANE_Frame format, int width, int 
height, int depth, FILE *ofp
     depth, color_type, PNG_INTERLACE_NONE,
     PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
 
+  if (icc_profile)
+    {
+      icc_buffer = sanei_load_icc_profile(icc_profile, &icc_size);
+      if (icc_size > 0)
+        {
+         png_set_iCCP(*png_ptr, *info_ptr, basename(icc_profile), 
PNG_COMPRESSION_TYPE_BASE, icc_buffer, icc_size);
+         free(icc_buffer);
+       }
+    }
+
   png_write_info(*png_ptr, *info_ptr);
 }
 #endif
@@ -1379,7 +1392,8 @@ scan_it (FILE *ofp)
 #ifdef HAVE_LIBPNG
                  case OUTPUT_PNG:
                    write_png_header (parm.format, parm.pixels_per_line,
-                                     parm.lines, parm.depth, ofp, &png_ptr, 
&info_ptr);
+                                     parm.lines, parm.depth, icc_profile,
+                                     ofp, &png_ptr, &info_ptr);
                    break;
 #endif
 #ifdef HAVE_LIBJPEG
@@ -1635,7 +1649,8 @@ scan_it (FILE *ofp)
 #ifdef HAVE_LIBPNG
       case OUTPUT_PNG:
        write_png_header (parm.format, parm.pixels_per_line,
-                          image.height, parm.depth, ofp, &png_ptr, &info_ptr);
+                         image.height, parm.depth, icc_profile,
+                         ofp, &png_ptr, &info_ptr);
       break;
 #endif
 #ifdef HAVE_LIBJPEG
-- 
2.12.2


-- 
sane-devel mailing list: sane-devel@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/sane-devel
Unsubscribe: Send mail with subject "unsubscribe your_password"
             to sane-devel-requ...@lists.alioth.debian.org

Reply via email to