From 0378f504e7bf0fde5e20c146fc357c66119b0b5b Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Wed, 15 Nov 2023 10:49:33 +0100 Subject: [PATCH] #865 TIFF: Half decoding fix, now uses standard conversion. --- .../imageio/metadata/tiff/Half.java | 5 ----- .../imageio/metadata/tiff/HalfTest.java | 17 ++++++++++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/imageio/imageio-metadata/src/main/java/com/twelvemonkeys/imageio/metadata/tiff/Half.java b/imageio/imageio-metadata/src/main/java/com/twelvemonkeys/imageio/metadata/tiff/Half.java index 9e21fb2a..23591f1d 100644 --- a/imageio/imageio-metadata/src/main/java/com/twelvemonkeys/imageio/metadata/tiff/Half.java +++ b/imageio/imageio-metadata/src/main/java/com/twelvemonkeys/imageio/metadata/tiff/Half.java @@ -87,11 +87,6 @@ public final class Half extends Number implements Comparable { } else if (exponent != 0) { // Normalized value exponent += 0x1c000; // exp - 15 + 127 - - // Smooth transition - if (mantissa == 0 && exponent > 0x1c400) { - return Float.intBitsToFloat((shortBits & 0x8000) << 16 | exponent << 13 | 0x3ff); - } } else if (mantissa != 0) { // && exp == 0 -> subnormal exponent = 0x1c400; // Make it normal diff --git a/imageio/imageio-metadata/src/test/java/com/twelvemonkeys/imageio/metadata/tiff/HalfTest.java b/imageio/imageio-metadata/src/test/java/com/twelvemonkeys/imageio/metadata/tiff/HalfTest.java index c99e0f97..5ca770a8 100644 --- a/imageio/imageio-metadata/src/test/java/com/twelvemonkeys/imageio/metadata/tiff/HalfTest.java +++ b/imageio/imageio-metadata/src/test/java/com/twelvemonkeys/imageio/metadata/tiff/HalfTest.java @@ -1,16 +1,16 @@ package com.twelvemonkeys.imageio.metadata.tiff; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import com.twelvemonkeys.io.FastByteArrayOutputStream; + +import org.junit.Test; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Random; -import org.junit.Test; - -import com.twelvemonkeys.io.FastByteArrayOutputStream; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; /** * HalfTest. @@ -36,6 +36,13 @@ public class HalfTest { } } + @Test + public void testExactEncoding() { + for (short half = -2048; half < 2048; half++) { + assertEquals(String.valueOf(half), half, Half.shortBitsToFloat(Half.floatToShortBits(half)), 0); + } + } + @Test public void testRoundTripBack() { for (int i = 0; i < 1024; i++) {