aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Hennebert <vhennebert@apache.org>2014-01-29 10:37:39 +0000
committerVincent Hennebert <vhennebert@apache.org>2014-01-29 10:37:39 +0000
commitf7befc49c57bf68450774250338d449253c2f5e3 (patch)
tree46908d666ce2a5c934b221627f6c53ae1c5deb8a
parent37c00cdf4e9bc4b922c5961bd3f38f7ed0f0d3f0 (diff)
parentf788f5d12b85ddecf7daa95f4eb735139080f399 (diff)
downloadxmlgraphics-fop-Temp_InlineContainer.tar.gz
xmlgraphics-fop-Temp_InlineContainer.zip
Brought the branch in sync with rev. r1559284 of trunkTemp_InlineContainer
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_InlineContainer@1562398 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--lib/xmlgraphics-commons-svn-trunk.jarbin631612 -> 632012 bytes
-rw-r--r--src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java38
2 files changed, 28 insertions, 10 deletions
diff --git a/lib/xmlgraphics-commons-svn-trunk.jar b/lib/xmlgraphics-commons-svn-trunk.jar
index 34e4d2b44..11b445c09 100644
--- a/lib/xmlgraphics-commons-svn-trunk.jar
+++ b/lib/xmlgraphics-commons-svn-trunk.jar
Binary files differ
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);