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