aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/fop
diff options
context:
space:
mode:
authorLuis Bernardo <lbernardo@apache.org>2014-01-17 23:35:00 +0000
committerLuis Bernardo <lbernardo@apache.org>2014-01-17 23:35:00 +0000
commitf788f5d12b85ddecf7daa95f4eb735139080f399 (patch)
tree7fb886f3766e2048b0c58dd27153a98dae9064d6 /src/java/org/apache/fop
parente7d05ec67b2652cd6ede79067d42eae8c057c955 (diff)
downloadxmlgraphics-fop-f788f5d12b85ddecf7daa95f4eb735139080f399.tar.gz
xmlgraphics-fop-f788f5d12b85ddecf7daa95f4eb735139080f399.zip
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
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1559284 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/fop')
-rw-r--r--src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java38
1 files changed, 28 insertions, 10 deletions
diff --git a/src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java b/src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java
index 58299c528..471efc567 100644
--- a/src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java
+++ b/src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java
@@ -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 AbstractImageAdapter implements PDFImage {
+ " 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);