From 69c59cfdf9f3fdb6e09c1b5de8fbb8700dc0d3e4 Mon Sep 17 00:00:00 2001 From: gohai Date: Tue, 10 Sep 2013 15:15:12 -0700 Subject: [PATCH 1/2] Image transparency for PDF output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before, drawing an image with transparency would result in black, opaque pixels in the PDF file. This change, figured out together with Jürg Lehni, fixes this. At its core, switching from drawImage(img, int, int, int, int, int, int, int, int, null) to drawImage(img, int, int, null) seems to do the trick - so this might have been a bug in iText all along. Signed-off-by: Jürg Lehni Signed-off-by: Gottfried Haider --- .../pdf/src/processing/pdf/PGraphicsPDF.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/java/libraries/pdf/src/processing/pdf/PGraphicsPDF.java b/java/libraries/pdf/src/processing/pdf/PGraphicsPDF.java index 2c6e8ae88..45b020710 100644 --- a/java/libraries/pdf/src/processing/pdf/PGraphicsPDF.java +++ b/java/libraries/pdf/src/processing/pdf/PGraphicsPDF.java @@ -404,22 +404,18 @@ public class PGraphicsPDF extends PGraphicsJava2D { ////////////////////////////////////////////////////////////// - /* - protected void imageImplAWT(java.awt.Image awtImage, + protected void imageImpl(PImage image, float x1, float y1, float x2, float y2, int u1, int v1, int u2, int v2) { pushMatrix(); translate(x1, y1); - int awtImageWidth = awtImage.getWidth(null); - int awtImageHeight = awtImage.getHeight(null); - scale((x2 - x1) / (float)awtImageWidth, - (y2 - y1) / (float)awtImageHeight); - g2.drawImage(awtImage, - 0, 0, awtImageWidth, awtImageHeight, - u1, v1, u2, v2, null); + int imageWidth = image.width; + int imageHeight = image.height; + scale((x2 - x1) / (float)imageWidth, + (y2 - y1) / (float)imageHeight); + g2.drawImage(image.getImage(), u1, v1, null); popMatrix(); } - */ ////////////////////////////////////////////////////////////// From 06fe38f218cfd4c4fb62438c8036fb9e10c2b1c6 Mon Sep 17 00:00:00 2001 From: gohai Date: Tue, 1 Oct 2013 22:13:39 -0700 Subject: [PATCH 2/2] Add support for custom source regions in imageImpl As suggested by Ben --- java/libraries/pdf/src/processing/pdf/PGraphicsPDF.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/java/libraries/pdf/src/processing/pdf/PGraphicsPDF.java b/java/libraries/pdf/src/processing/pdf/PGraphicsPDF.java index 45b020710..762a78db7 100644 --- a/java/libraries/pdf/src/processing/pdf/PGraphicsPDF.java +++ b/java/libraries/pdf/src/processing/pdf/PGraphicsPDF.java @@ -413,7 +413,13 @@ public class PGraphicsPDF extends PGraphicsJava2D { int imageHeight = image.height; scale((x2 - x1) / (float)imageWidth, (y2 - y1) / (float)imageHeight); - g2.drawImage(image.getImage(), u1, v1, null); + if (u2-u1 != imageWidth || v2-v1 != imageHeight) { + PImage tmp = new PImage(u2-u1, v2-v1, ARGB); + tmp.copy(image, u1, v1, u2, v2, 0, 0, u2-u1, v2-v1); + g2.drawImage(image.getImage(), 0, 0, null); + } else { + g2.drawImage(image.getImage(), u1, v1, null); + } popMatrix(); }