Author: lbernardo
Date: Fri Jan 17 23:35:00 2014
New Revision: 1559284

URL: http://svn.apache.org/r1559284
Log:
FOP-1801: conversion B&W GIF=>PDF creates PDF with colorspace RGB if FOP0.95 
and Gray if FOP0.20.5; patch submitted by Thanasis Giannimaras following 
suggestion by Jeremias Maerki

Modified:
    xmlgraphics/fop/trunk/lib/xmlgraphics-commons-svn-trunk.jar
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java

Modified: xmlgraphics/fop/trunk/lib/xmlgraphics-commons-svn-trunk.jar
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/lib/xmlgraphics-commons-svn-trunk.jar?rev=1559284&r1=1559283&r2=1559284&view=diff
==============================================================================
Binary files - no diff available.

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java?rev=1559284&r1=1559283&r2=1559284&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java
 (original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java
 Fri Jan 17 23:35:00 2014
@@ -23,6 +23,8 @@ import java.awt.color.ICC_Profile;
 import java.awt.image.DataBufferByte;
 import java.awt.image.IndexColorModel;
 import java.awt.image.Raster;
+import java.io.IOException;
+import java.util.Arrays;
 
 import org.apache.commons.io.output.ByteArrayOutputStream;
 import org.apache.commons.logging.Log;
@@ -239,24 +241,40 @@ public abstract class AbstractImageAdapt
                     + " The image may not be handled correctly." + " Base 
color space: "
                     + icm.getColorSpace() + " Image: " + image.getInfo());
         }
-        indexed.add(new 
PDFName(toPDFColorSpace(icm.getColorSpace()).getName()));
+        ByteArrayOutputStream baout = new ByteArrayOutputStream();
         int c = icm.getMapSize();
         int hival = c - 1;
         if (hival > MAX_HIVAL) {
             throw new UnsupportedOperationException("hival must not go beyond 
" + MAX_HIVAL);
         }
-        indexed.add(Integer.valueOf(hival));
+        boolean isDeviceGray = false;
         int[] palette = new int[c];
         icm.getRGBs(palette);
-        ByteArrayOutputStream baout = new ByteArrayOutputStream();
-        for (int i = 0; i < c; i++) {
-            // TODO Probably doesn't work for non RGB based color spaces
-            // See log warning above
-            int entry = palette[i];
-            baout.write((entry & 0xFF0000) >> 16);
-            baout.write((entry & 0xFF00) >> 8);
-            baout.write(entry & 0xFF);
+        byte[] reds = new byte[c];
+        byte[] greens = new byte[c];
+        byte[] blues = new byte[c];
+        icm.getReds(reds);
+        icm.getGreens(greens);
+        icm.getBlues(blues);
+        isDeviceGray = Arrays.equals(reds, blues) && Arrays.equals(blues, 
greens);
+        if  (isDeviceGray) {
+            indexed.add(new PDFName("DeviceGray"));
+            try {
+                baout.write(blues);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }  else {
+            indexed.add(new 
PDFName(toPDFColorSpace(icm.getColorSpace()).getName()));
+            for (int i = 0; i < c; i++) {
+                int entry = palette[i];
+                baout.write((entry & 0xFF0000) >> 16);
+                baout.write((entry & 0xFF00) >> 8);
+                baout.write(entry & 0xFF);
+            }
         }
+        indexed.add(hival);
+
         indexed.add(baout.toByteArray());
 
         dict.put("ColorSpace", indexed);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to