Author: lehmi
Date: Sun Mar 28 14:29:27 2010
New Revision: 928408
URL: http://svn.apache.org/viewvc?rev=928408&view=rev
Log:
PDFBOX-584: create the correct colormodel to avoid inverted colors
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java
URL:
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java?rev=928408&r1=928407&r2=928408&view=diff
==============================================================================
---
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java
(original)
+++
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java
Sun Mar 28 14:29:27 2010
@@ -16,6 +16,7 @@
*/
package org.apache.pdfbox.pdmodel.graphics.xobject;
+import java.awt.Transparency;
import java.awt.image.DataBufferByte;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
@@ -36,6 +37,8 @@ import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.common.PDStream;
import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
+import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray;
+import org.apache.pdfbox.pdmodel.graphics.color.PDICCBased;
import org.apache.pdfbox.pdmodel.graphics.predictor.PredictorAlgorithm;
@@ -146,12 +149,42 @@ public class PDPixelMap extends PDXObjec
if (bpc == 1)
{
- byte[] map = new byte[] {(byte)0x00, (byte)0xff};
- cm = new IndexColorModel(1, 2, map, map, map, 1);
+ byte[] map = null;
+ if (colorspace instanceof PDDeviceGray)
+ {
+ map = new byte[] {(byte)0xff};
+ }
+ else if (colorspace instanceof PDICCBased)
+ {
+ if ( ((PDICCBased)colorspace).getNumberOfComponents() ==
1)
+ {
+ map = new byte[] {(byte)0xff};
+ }
+ else
+ {
+ map = new byte[] {(byte)0x00, (byte)0xff};
+ }
+ }
+ else
+ {
+ map = new byte[] {(byte)0x00, (byte)0xff};
+ }
+ cm = new IndexColorModel(bpc, map.length, map, map, map,
Transparency.OPAQUE);
}
else
{
- cm = colorspace.createColorModel( bpc );
+ if (colorspace instanceof PDICCBased)
+ {
+ if (((PDICCBased)colorspace).getNumberOfComponents() == 1)
+ {
+ byte[] map = new byte[] {(byte)0xff};
+ cm = new IndexColorModel(bpc, 1, map, map, map,
Transparency.OPAQUE);
+ }
+ else
+ cm = colorspace.createColorModel( bpc );
+ }
+ else
+ cm = colorspace.createColorModel( bpc );
}
log.info("ColorModel: " + cm.toString());