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 2012/11/08 10:05:46 UTC

svn commit: r1406972 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject: CompositeImage.java PDJpeg.java

Author: lehmi
Date: Thu Nov  8 09:05:46 2012
New Revision: 1406972

URL: http://svn.apache.org/viewvc?rev=1406972&view=rev
Log:
PDFBOX-1440: take the decode array into account

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/CompositeImage.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/CompositeImage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/CompositeImage.java?rev=1406972&r1=1406971&r2=1406972&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/CompositeImage.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/CompositeImage.java Thu Nov  8 09:05:46 2012
@@ -111,11 +111,20 @@ public class CompositeImage
      * This method applies the specified stencil mask to a given image and returns a new BufferedImage
      * whose alpha values are computed from the stencil mask (smask) image.
      * 
+     * @param decodeArray the decode array
      * @return the stencil masked image 
      */
-    public BufferedImage createStencilMaskedImage()
+    public BufferedImage createStencilMaskedImage(COSArray decodeArray)
     {
-        final int baseImageWidth = baseImage.getWidth();
+    	// default: 0 (black) == opaque
+        int alphaValue = 0;
+        if (decodeArray != null)
+        {
+        	// invert the stencil mask: 1 (white) == opaque
+            alphaValue = decodeArray.getInt(0) > decodeArray.getInt(1) ? 1 : 0;
+        }
+
+    	final int baseImageWidth = baseImage.getWidth();
         final int baseImageHeight = baseImage.getHeight();
         WritableRaster maskRaster = smaskImage.getRaster();
         BufferedImage result = new BufferedImage(baseImageWidth, baseImageHeight, BufferedImage.TYPE_INT_ARGB);
@@ -127,7 +136,7 @@ public class CompositeImage
                 maskRaster.getPixel(x, y, alpha);
                 // We need to remove any alpha value in the main image.
                 int rgbOnly = 0x00FFFFFF & baseImage.getRGB(x, y);
-                int alphaOnly = alpha[0] == 0 ? 0xFF000000 : 0;
+                int alphaOnly = alpha[0] == alphaValue ? 0xFF000000 : 0;
                 result.setRGB(x, y, rgbOnly | alphaOnly);
             }
         }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java?rev=1406972&r1=1406971&r2=1406972&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java Thu Nov  8 09:05:46 2012
@@ -294,7 +294,7 @@ public class PDJpeg extends PDXObjectIma
             {
             	maskImage = (PDXObjectImage)PDXObject.createXObject(mask);
                 CompositeImage compositeImage = new CompositeImage(bi, maskImage.getRGBImage());
-                BufferedImage rgbImage = compositeImage.createStencilMaskedImage();
+                BufferedImage rgbImage = compositeImage.createStencilMaskedImage(maskImage.getDecode());
                 image = rgbImage;
             }	
         }