Author: tilman
Date: Fri Apr  4 17:56:37 2014
New Revision: 1584837

URL: http://svn.apache.org/r1584837
Log:
PDFBOX-2007: optimize fromBGRtoRGB()

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java?rev=1584837&r1=1584836&r2=1584837&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java 
Fri Apr  4 17:56:37 2014
@@ -194,20 +194,22 @@ final class DCTFilter extends Filter
     {
         WritableRaster writableRaster = 
raster.createCompatibleWritableRaster();
 
-        int[] bgr = new int[3];
-        int[] rgb = new int[3];
-        for (int y = 0, height = raster.getHeight(); y < height; y++)
+        int width = raster.getWidth();
+        int height = raster.getHeight();
+        int w3 = width * 3;
+        int[] tab = new int[w3];
+        //BEWARE: handling the full image at a time is slower than one line at 
a time        
+        for (int y = 0; y < height; y++)
         {
-            for (int x = 0, width = raster.getWidth(); x < width; x++)
+            raster.getPixels(0, y, width, 1, tab);
+            for (int off = 0; off < w3; off += 3)
             {
-                raster.getPixel(x, y, bgr);
-                rgb[0] = bgr[2];
-                rgb[1] = bgr[1];
-                rgb[2] = bgr[0];
-                writableRaster.setPixel(x, y, rgb);
+                int tmp = tab[off];
+                tab[off] = tab[off + 2];
+                tab[off + 2] = tmp;
             }
+            writableRaster.setPixels(0, y, width, 1, tab);
         }
-
         return writableRaster;
     }
 


Reply via email to