Author: tilman Date: Mon Aug 14 15:58:04 2017 New Revision: 1805014 URL: http://svn.apache.org/viewvc?rev=1805014&view=rev Log: PDFBOX-3897: avoid sRGB self-conversion
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java?rev=1805014&r1=1805013&r2=1805014&view=diff ============================================================================== --- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java (original) +++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java Mon Aug 14 15:58:04 2017 @@ -100,8 +100,7 @@ public final class PDDeviceRGB extends P @Override public float[] toRGB(float[] value) { - init(); - return awtColorSpace.toRGB(value); + return value; } @Override Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java?rev=1805014&r1=1805013&r2=1805014&view=diff ============================================================================== --- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java (original) +++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java Mon Aug 14 15:58:04 2017 @@ -63,6 +63,7 @@ public final class PDICCBased extends PD private PDColorSpace alternateColorSpace; private ICC_ColorSpace awtColorSpace; private PDColor initialColor; + private boolean isRGB = false; /** * Creates a new ICC color space with an empty stream. @@ -131,6 +132,7 @@ public final class PDICCBased extends PD profile = ICC_Profile.getInstance(input); if (is_sRGB(profile)) { + isRGB = true; awtColorSpace = (ICC_ColorSpace) ColorSpace.getInstance(ColorSpace.CS_sRGB); iccProfile = awtColorSpace.getProfile(); } @@ -166,6 +168,10 @@ public final class PDICCBased extends PD // fall back to alternateColorSpace color space awtColorSpace = null; alternateColorSpace = getAlternateColorSpace(); + if (alternateColorSpace.equals(PDDeviceRGB.INSTANCE)) + { + isRGB = true; + } LOG.error("Can't read embedded ICC profile (" + e.getLocalizedMessage() + "), using alternate color space: " + alternateColorSpace.getName()); initialColor = alternateColorSpace.getInitialColor(); } @@ -194,6 +200,10 @@ public final class PDICCBased extends PD @Override public float[] toRGB(float[] value) throws IOException { + if (isRGB) + { + return value; + } if (awtColorSpace != null) { // WARNING: toRGB is very slow when used with LUT-based ICC profiles