From 7a5110506b32354fc69a65404ec44a2113b3f570 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Sat, 18 Nov 2017 16:13:27 +0100 Subject: [PATCH] #394: Fix for ArrayIndexOutOfBoundsException for grayscale floating point TIFFs + bonus WhiteIsZero for float. --- .../imageio/plugins/tiff/TIFFImageReader.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java index acfc2f4e..07a5c98f 100755 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java @@ -1788,8 +1788,11 @@ public final class TIFFImageReader extends ImageReaderBase { private void clamp(float[] rowDataFloat) { for (int i = 0; i < rowDataFloat.length; i++) { - if (rowDataFloat[i] > 1) { - rowDataFloat[i] = 1; + if (rowDataFloat[i] > 1f) { + rowDataFloat[i] = 1f; + } + else if (rowDataFloat[i] < 0f) { + rowDataFloat[i] = 0f; } } } @@ -2007,6 +2010,13 @@ public final class TIFFImageReader extends ImageReaderBase { private void normalizeColor(int photometricInterpretation, float[] data) { switch (photometricInterpretation) { case TIFFBaseline.PHOTOMETRIC_WHITE_IS_ZERO: + // Inverse values + for (int i = 0; i < data.length; i++) { + data[i] = 1f - data[i]; + } + + break; + case TIFFExtension.PHOTOMETRIC_CIELAB: case TIFFExtension.PHOTOMETRIC_ICCLAB: case TIFFExtension.PHOTOMETRIC_ITULAB: