You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2017/01/26 16:16:07 UTC
svn commit: r1780419 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
Author: tilman
Date: Thu Jan 26 16:16:07 2017
New Revision: 1780419
URL: http://svn.apache.org/viewvc?rev=1780419&view=rev
Log:
PDFBOX-3000: Add code from Harald Kuhr to create gray transparency group image with alpha channel to avoid NPE with alpha softmasks
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1780419&r1=1780418&r2=1780419&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java Thu Jan 26 16:16:07 2017
@@ -22,10 +22,13 @@ import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.Paint;
+import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.TexturePaint;
+import java.awt.Transparency;
+import java.awt.color.ColorSpace;
import java.awt.geom.AffineTransform;
import java.awt.geom.Area;
import java.awt.geom.GeneralPath;
@@ -33,6 +36,11 @@ import java.awt.geom.PathIterator;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
+import java.awt.image.ComponentColorModel;
+import java.awt.image.DataBuffer;
+import java.awt.image.DataBufferByte;
+import java.awt.image.Raster;
import java.awt.image.WritableRaster;
import java.io.IOException;
import java.util.HashMap;
@@ -1377,7 +1385,7 @@ public class PageDrawer extends PDFGraph
// FIXME - color space
if (form.getGroup().getColorSpace() instanceof PDDeviceGray)
{
- image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
+ image = create2ByteGrayAlphaImage(width, height);
}
else
{
@@ -1448,6 +1456,35 @@ public class PageDrawer extends PDFGraph
}
}
+ // http://stackoverflow.com/a/21181943/535646
+ private BufferedImage create2ByteGrayAlphaImage(int width, int height)
+ {
+ /**
+ * gray + alpha
+ */
+ int[] bandOffsets = new int[] {1, 0};
+ int bands = bandOffsets.length;
+
+ /**
+ * Color Model usesd for raw GRAY + ALPHA
+ */
+ final ColorModel CM_GRAY_ALPHA
+ = new ComponentColorModel(
+ ColorSpace.getInstance(ColorSpace.CS_GRAY),
+ true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE);
+
+ // Init data buffer of type byte
+ DataBuffer buffer = new DataBufferByte(width * height * bands);
+
+ // Wrap the data buffer in a raster
+ WritableRaster raster =
+ Raster.createInterleavedRaster(buffer, width, height,
+ width * bands, bands, bandOffsets, new Point(0, 0));
+
+ // Create a custom BufferedImage with the raster and a suitable color model
+ return new BufferedImage(CM_GRAY_ALPHA, raster, false, null);
+ }
+
public BufferedImage getImage()
{
return image;