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/09/12 15:21:46 UTC

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

Author: lehmi
Date: Sun Sep 12 13:21:45 2010
New Revision: 996309

URL: http://svn.apache.org/viewvc?rev=996309&view=rev
Log:
PDFBOX-825: fixed use of opacity within an IndexedColorspace.

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java
    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/cos/COSName.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java?rev=996309&r1=996308&r2=996309&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java Sun Sep 12 13:21:45 2010
@@ -597,8 +597,12 @@ public final class COSName extends COSBa
     public static final COSName MARK_INFO = new COSName("MarkInfo");
 
     /**
-    * A common COSName value.
-    */
+     * A common COSName value.
+     */
+    public static final COSName MASK = new COSName( "Mask" );
+    /**
+     * A common COSName value.
+     */
     public static final COSName MATRIX = new COSName( "Matrix" );
     /**
      * "MCID"

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=996309&r1=996308&r2=996309&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 Sep 12 13:21:45 2010
@@ -201,9 +201,8 @@ public class PDPixelMap extends PDXObjec
                     ColorModel baseColorModel = csIndexed.getBaseColorSpace().createColorModel(bpc);
                     int size = csIndexed.getHighValue();
                     byte[] index = csIndexed.getLookupData();
-                    COSArray decode = getDecode();
-                    boolean isOpaque = (decode != null && decode.getInt(0) == 1) ? true : false;
                     boolean hasAlpha = baseColorModel.hasAlpha();
+                    COSArray maskArray = getMask();
                     if( baseColorModel.getTransferType() != DataBuffer.TYPE_BYTE )
                     {
                         throw new IOException( "Not implemented" );
@@ -211,7 +210,7 @@ public class PDPixelMap extends PDXObjec
                     byte[] r = new byte[size+1];
                     byte[] g = new byte[size+1];
                     byte[] b = new byte[size+1];
-                    byte[] a = new byte[size+1];
+                    byte[] a = hasAlpha ? new byte[size+1] : null;
                     byte[] inData = new byte[baseColorModel.getNumComponents()];
                     for( int i = 0; i <= size; i++ )
                     {
@@ -223,12 +222,21 @@ public class PDPixelMap extends PDXObjec
                         {
                             a[i] = (byte)baseColorModel.getAlpha(inData);
                         }
+                    }
+                    if (hasAlpha)
+                    {
+                        cm = new IndexColorModel(bpc, size+1, r, g, b, a);
+                    }
+                    else {
+                        if (maskArray != null)
+                        {
+                            cm = new IndexColorModel(bpc, size+1, r, g, b, maskArray.getInt(0));
+                        }
                         else
                         {
-                            a[i] = isOpaque ? (byte)0xFF : (byte)0x00;
+                            cm = new IndexColorModel(bpc, size+1, r, g, b);
                         }
                     }
-                    cm = new IndexColorModel(bpc, size+1, r, g, b, a);
                 }
                 else
                     cm = colorspace.createColorModel( bpc );
@@ -350,7 +358,7 @@ public class PDPixelMap extends PDXObjec
      * <li>11 PNG prediction (on encoding, PNG Sub on all rows)
      * <li>12 PNG prediction (on encoding, PNG Up on all rows)
      * <li>13 PNG prediction (on encoding, PNG Average on all rows)
-     * <li>14 PNG prediction (on encoding, PNG Paeth on all rows)
+     * <li>14 PNG prediction (on encoding, PNG Path on all rows)
      * <li>15 PNG prediction (on encoding, PNG optimum)
      * </ul>
      *

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=996309&r1=996308&r2=996309&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 Sun Sep 12 13:21:45 2010
@@ -342,4 +342,19 @@ file.
         }
         return null;
     }
+
+    /** 
+     * Returns the optional mask of a XObjectImage if there is one.
+     * 
+     * @return The mask as COSArray otherwise null.
+     */
+    public COSArray getMask()
+    {
+        COSBase mask = getCOSStream().getDictionaryObject(COSName.MASK);
+        if (mask != null)
+        {
+            return (COSArray)mask;
+        }
+        return null;
+    }
 }