You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2010/03/30 19:47:18 UTC

svn commit: r929199 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject: PDPixelMap.java PDXObjectImage.java

Author: lehmi
Date: Tue Mar 30 17:47:18 2010
New Revision: 929199

URL: http://svn.apache.org/viewvc?rev=929199&view=rev
Log:
PDFBOX-672: take the decode array of an XObjectImage into amount when calculating the color model.

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.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=929199&r1=929198&r2=929199&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 Tue Mar 30 17:47:18 2010
@@ -135,7 +135,6 @@ public class PDPixelMap extends PDXObjec
             int bpc = getBitsPerComponent();
             int predictor = getPredictor();
             List filters = getPDStream().getFilters();
-            ColorModel cm;
             
             byte[] array = getPDStream().getByteArray();
     
@@ -147,12 +146,23 @@ public class PDPixelMap extends PDXObjec
                 return null;
             }
             
+            ColorModel cm = null;
             if (bpc == 1)
             {
                 byte[] map = null;
                 if (colorspace instanceof PDDeviceGray)
                 {
-                    map = new byte[] {(byte)0xff};
+                    COSArray decode = getDecode();
+                    // we have to invert the b/w-values, 
+                    // if the Decode array exists and consists of (1,0)
+                    if (decode != null && decode.getInt(0) == 1)
+                    {
+                        map = new byte[] {(byte)0xff};
+                    }
+                    else
+                    {
+                        map = new byte[] {(byte)0x00, (byte)0xff};
+                    }
                 }
                 else if (colorspace instanceof PDICCBased)
                 {

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java?rev=929199&r1=929198&r2=929199&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java Tue Mar 30 17:47:18 2010
@@ -24,6 +24,7 @@ import java.io.File;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.PDDocument;
@@ -158,7 +159,7 @@ file.
      */
     public int getHeight()
     {
-        return getCOSStream().getInt( "Height", -1 );
+        return getCOSStream().getInt( COSName.HEIGHT, -1 );
     }
 
     /**
@@ -168,7 +169,7 @@ file.
      */
     public void setHeight( int height )
     {
-        getCOSStream().setInt( "Height", height );
+        getCOSStream().setInt( COSName.HEIGHT, height );
     }
 
     /**
@@ -178,7 +179,7 @@ file.
      */
     public int getWidth()
     {
-        return getCOSStream().getInt( "Width", -1 );
+        return getCOSStream().getInt( COSName.WIDTH, -1 );
     }
 
     /**
@@ -188,7 +189,7 @@ file.
      */
     public void setWidth( int width )
     {
-        getCOSStream().setInt( "Width", width );
+        getCOSStream().setInt( COSName.WIDTH, width );
     }
 
     /**
@@ -294,7 +295,7 @@ file.
      */
     public boolean getImageMask()
     {
-        return getCOSStream().getBoolean( "ImageMask", false );
+        return getCOSStream().getBoolean( COSName.IMAGE_MASK, false );
     }
     
     /**
@@ -306,4 +307,17 @@ file.
     {
         graphicsState = newGS;
     }
+
+    /**
+     * Returns the Decode Array of an XObjectImage.
+     * @return the decode array
+     */
+    public COSArray getDecode() {
+        COSBase decode = getCOSStream().getDictionaryObject( COSName.DECODE );
+        if (decode != null && decode instanceof COSArray) 
+        {
+            return (COSArray)decode;
+        }
+        return null;
+    }
 }