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 2014/06/10 19:12:38 UTC

svn commit: r1601689 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image: PDImageXObject.java SampledImageReader.java

Author: lehmi
Date: Tue Jun 10 17:12:37 2014
New Revision: 1601689

URL: http://svn.apache.org/r1601689
Log:
PDFBOX-2127: optimize calls of getPixel by reusing the pixel array as proposed by Petr Slaby

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java?rev=1601689&r1=1601688&r2=1601689&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java Tue Jun 10 17:12:37 2014
@@ -264,6 +264,7 @@ public final class PDImageXObject extend
 
         float[] rgb = new float[3];
         float[] rgba = new float[4];
+        float[] alphaPixel = null;
         for (int y = 0; y < height; y++)
         {
             for (int x = 0; x < width; x++)
@@ -273,14 +274,15 @@ public final class PDImageXObject extend
                 rgba[0] = rgb[0];
                 rgba[1] = rgb[1];
                 rgba[2] = rgb[2];
-
+                
+                alphaPixel = alpha.getPixel(x, y, alphaPixel);
                 if (isSoft)
                 {
-                    rgba[3] = alpha.getPixel(x, y, (float[])null)[0];
+                    rgba[3] = alphaPixel[0];
                 }
                 else
                 {
-                    rgba[3] = 255 - alpha.getPixel(x, y, (float[])null)[0];
+                    rgba[3] = 255 - alphaPixel[0];
                 }
 
                 dest.setPixel(x, y, rgba);

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java?rev=1601689&r1=1601688&r2=1601689&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java Tue Jun 10 17:12:37 2014
@@ -79,22 +79,17 @@ final class SampledImageReader
         WritableRaster raster = masked.getRaster();
         WritableRaster alpha = mask.getRaster();
 
-        float[] rgba = new float[4];
         final float[] transparent = new float[4];
+        float[] alphaPixel = null;
         for (int y = 0; y < height; y++)
         {
             for (int x = 0; x < width; x++)
             {
-                raster.getPixel(x, y, rgba);
-
-                if (alpha.getPixel(x, y, (float[])null)[0] == 255)
+                alphaPixel = alpha.getPixel(x, y, alphaPixel);
+                if (alphaPixel[0] == 255)
                 {
                     raster.setPixel(x, y, transparent);
                 }
-                else
-                {
-                    raster.setPixel(x, y, rgba);
-                }
             }
         }
 
@@ -246,11 +241,11 @@ final class SampledImageReader
             final int width = pdImage.getWidth();
             final int height = pdImage.getHeight();
             final int numComponents = pdImage.getColorSpace().getNumberOfComponents();
+            int max = width * height;
 
             for (int c = 0; c < numComponents; c++)
             {
                 int sourceOffset = c;
-                int max = width * height;
                 for (int i = 0; i < max; i++)
                 {
                     banks[c][i] = source[sourceOffset];
@@ -397,6 +392,7 @@ final class SampledImageReader
 
         float[] rgb = new float[3];
         float[] rgba = new float[4];
+        float[] alphaPixel = null;
         for (int y = 0; y < height; y++)
         {
             for (int x = 0; x < width; x++)
@@ -406,7 +402,8 @@ final class SampledImageReader
                 rgba[0] = rgb[0];
                 rgba[1] = rgb[1];
                 rgba[2] = rgb[2];
-                rgba[3] = 255 - alpha.getPixel(x, y, (float[])null)[0];
+                alphaPixel = alpha.getPixel(x, y, alphaPixel);
+                rgba[3] = 255 - alphaPixel[0];
 
                 dest.setPixel(x, y, rgba);
             }