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/07/08 11:02:22 UTC
svn commit: r1801277 -
/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java
Author: tilman
Date: Sat Jul 8 11:02:22 2017
New Revision: 1801277
URL: http://svn.apache.org/viewvc?rev=1801277&view=rev
Log:
PDFBOX-3854: return BufferedImage.TYPE_INT_RGB instead of TYPE_CUSTOM
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java?rev=1801277&r1=1801276&r2=1801277&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java Sat Jul 8 11:02:22 2017
@@ -111,6 +111,28 @@ public final class PDDeviceRGB extends P
ColorModel colorModel = new ComponentColorModel(awtColorSpace,
false, false, Transparency.OPAQUE, raster.getDataBuffer().getDataType());
- return new BufferedImage(colorModel, raster, false, null);
+ BufferedImage image = new BufferedImage(colorModel, raster, false, null);
+
+ //
+ // WARNING: this method is performance sensitive, modify with care!
+ //
+ // Please read PDFBOX-3854 and look at the related commits first.
+ // The current code returns TYPE_INT_RGB images which prevents slowness due to threads
+ // blocking each other when TYPE_CUSTOM images are used.
+ // ColorConvertOp is not used here because it has a larger memory footprint and no further
+ // performance improvement.
+ // The multiparameter setRGB() call is not used because it brings no improvement.
+
+ BufferedImage dest = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
+ int width = image.getWidth();
+ int height = image.getHeight();
+ for (int x = 0; x < width; ++x)
+ {
+ for (int y = 0; y < height; ++y)
+ {
+ dest.setRGB(x, y, image.getRGB(x, y));
+ }
+ }
+ return dest;
}
}