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 2014/09/08 12:47:52 UTC

svn commit: r1623353 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java

Author: tilman
Date: Mon Sep  8 10:47:52 2014
New Revision: 1623353

URL: http://svn.apache.org/r1623353
Log:
PDFBOX-2324: use the pixel converter instead of the raster converter to avoid scale problems with /Lab colorspace; set method called in constructor final to avoid override

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java?rev=1623353&r1=1623352&r2=1623353&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java Mon Sep  8 10:47:52 2014
@@ -285,13 +285,11 @@ public class PDDeviceN extends PDSpecial
 
         // use the tint transform to convert the sample into
         // the alternate color space (this is usually 1:many)
-        WritableRaster altRaster = Raster.createBandedRaster(DataBuffer.TYPE_BYTE,
-                width, height, alternateColorSpace.getNumberOfComponents(), new Point(0, 0));
-
-        int numAltComponents = alternateColorSpace.getNumberOfComponents();
+        BufferedImage rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+        WritableRaster rgbRaster = rgbImage.getRaster();
+        int[] rgb = new int[3];
         int numSrcComponents = getColorantNames().size();
         float[] src = new float[numSrcComponents];
-        int[] alt = new int[numAltComponents];
         for (int y = 0; y < height; y++)
         {
             for (int x = 0; x < width; x++)
@@ -309,18 +307,20 @@ public class PDDeviceN extends PDSpecial
 
                 // convert to alternate color space via tint transform
                 float[] result = tintTransform.eval(src);
-                for (int s = 0; s < numAltComponents; s++)
+                
+                // convert from alternate color space to RGB
+                float[] rgbFloat = alternateColorSpace.toRGB(result);
+                
+                for (int s = 0; s < 3; s++)
                 {
                     // scale to 0..255
-                    alt[s] = (int)(result[s] * 255f);
-                }
+                    rgb[s] = (int) (rgbFloat[s] * 255f);
+                }                
 
-                altRaster.setPixel(x, y, alt);
+                rgbRaster.setPixel(x, y, rgb);
             }
         }
-
-        // convert the alternate color space to RGB
-        return alternateColorSpace.toRGBImage(altRaster);
+        return rgbImage;
     }
 
     @Override
@@ -417,7 +417,7 @@ public class PDDeviceN extends PDSpecial
     }
 
     @Override
-    public int getNumberOfComponents()
+    public final int getNumberOfComponents()
     {
         return getColorantNames().size();
     }