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; }