TMI-41: Fix for CorbisRGB special handling testcase JDK 1.7+

This commit is contained in:
Harald Kuhr 2015-01-06 12:45:54 +01:00
parent 662f12a41d
commit f588d65565
3 changed files with 13 additions and 5 deletions

View File

@ -141,7 +141,7 @@ public final class ColorSpaces {
// Special handling to detect problematic Corbis RGB ICC Profile. // Special handling to detect problematic Corbis RGB ICC Profile.
// This makes sure tags that are expected to be of type 'XYZ ' really have this expected type. // This makes sure tags that are expected to be of type 'XYZ ' really have this expected type.
// Should leave other ICC profiles unchanged. // Should leave other ICC profiles unchanged.
if (fixProfileXYZTag(profile, ICC_Profile.icSigMediaWhitePointTag)) { if (!JDK_HANDLES_RENDERING_INTENTS && fixProfileXYZTag(profile, ICC_Profile.icSigMediaWhitePointTag)) {
fixProfileXYZTag(profile, ICC_Profile.icSigRedColorantTag); fixProfileXYZTag(profile, ICC_Profile.icSigRedColorantTag);
fixProfileXYZTag(profile, ICC_Profile.icSigGreenColorantTag); fixProfileXYZTag(profile, ICC_Profile.icSigGreenColorantTag);
fixProfileXYZTag(profile, ICC_Profile.icSigBlueColorantTag); fixProfileXYZTag(profile, ICC_Profile.icSigBlueColorantTag);
@ -156,7 +156,7 @@ public final class ColorSpaces {
* @return {@code true} if found and fixed, otherwise {@code false} for short-circuiting * @return {@code true} if found and fixed, otherwise {@code false} for short-circuiting
* to avoid unnecessary array copying. * to avoid unnecessary array copying.
*/ */
private static boolean fixProfileXYZTag(ICC_Profile profile, final int tagSignature) { private static boolean fixProfileXYZTag(final ICC_Profile profile, final int tagSignature) {
// TODO: This blows up on OpenJDK... Bug? // TODO: This blows up on OpenJDK... Bug?
byte[] data = profile.getData(tagSignature); byte[] data = profile.getData(tagSignature);

View File

@ -34,6 +34,7 @@ import java.awt.color.ColorSpace;
import java.awt.color.ICC_ColorSpace; import java.awt.color.ICC_ColorSpace;
import java.awt.color.ICC_Profile; import java.awt.color.ICC_Profile;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays;
import static org.junit.Assert.*; import static org.junit.Assert.*;
@ -45,6 +46,9 @@ import static org.junit.Assert.*;
* @version $Id: ColorSpacesTest.java,v 1.0 07.02.11 14.32 haraldk Exp$ * @version $Id: ColorSpacesTest.java,v 1.0 07.02.11 14.32 haraldk Exp$
*/ */
public class ColorSpacesTest { public class ColorSpacesTest {
private static final byte[] XYZ = new byte[] {'X', 'Y', 'Z', ' '};
@Test @Test
public void testCreateColorSpaceFromKnownProfileReturnsInternalCS_sRGB() { public void testCreateColorSpaceFromKnownProfileReturnsInternalCS_sRGB() {
ICC_Profile profile = ICC_Profile.getInstance(ColorSpace.CS_sRGB); ICC_Profile profile = ICC_Profile.getInstance(ColorSpace.CS_sRGB);
@ -189,11 +193,15 @@ public class ColorSpacesTest {
@Test @Test
public void testCorbisRGBSpecialHandling() throws IOException { public void testCorbisRGBSpecialHandling() throws IOException {
ICC_Profile corbisRGB = ICC_Profile.getInstance(getClass().getResourceAsStream("/profiles/Corbis RGB.icc")); ICC_Profile corbisRGB = ICC_Profile.getInstance(getClass().getResourceAsStream("/profiles/Corbis RGB.icc"));
ICC_Profile corbisRGBFixed = ICC_Profile.getInstance(getClass().getResourceAsStream("/profiles/Corbis RGB_fixed.icc"));
ICC_ColorSpace colorSpace = ColorSpaces.createColorSpace(corbisRGB); ICC_ColorSpace colorSpace = ColorSpaces.createColorSpace(corbisRGB);
assertNotNull(colorSpace); assertNotNull(colorSpace);
assertArrayEquals(colorSpace.getProfile().getData(), corbisRGBFixed.getData());
// Make sure all known affected tags have type 'XYZ '
ICC_Profile profile = colorSpace.getProfile();
assertArrayEquals(XYZ, Arrays.copyOfRange(profile.getData(ICC_Profile.icSigMediaWhitePointTag), 0, 4));
assertArrayEquals(XYZ, Arrays.copyOfRange(profile.getData(ICC_Profile.icSigRedColorantTag), 0, 4));
assertArrayEquals(XYZ, Arrays.copyOfRange(profile.getData(ICC_Profile.icSigGreenColorantTag), 0, 4));
assertArrayEquals(XYZ, Arrays.copyOfRange(profile.getData(ICC_Profile.icSigBlueColorantTag), 0, 4));
} }
} }