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;
}
}