mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2026-04-30 00:00:01 -04:00
#254 Fix NPE reading TIFF Metadata when BitsPerSample not set
This commit is contained in:
+63
-3
@@ -22,6 +22,8 @@ import javax.imageio.stream.ImageInputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
@@ -228,7 +230,6 @@ public class TIFFImageMetadataTest {
|
||||
ifdNode.appendChild(tiffField);
|
||||
|
||||
assertNodeNotEquals("Modified tree does not differ", nativeTree, nativeTree2);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -473,6 +474,67 @@ public class TIFFImageMetadataTest {
|
||||
metadata.setFromTree(nativeFormat, new IIOMetadataNode(nativeFormat)); // Requires at least one child node
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStandardChromaSamplesPerPixel() {
|
||||
Set<Entry> entries = new HashSet<>();
|
||||
entries.add(new TIFFImageWriter.TIFFEntry(TIFF.TAG_PHOTOMETRIC_INTERPRETATION, TIFFBaseline.PHOTOMETRIC_RGB));
|
||||
entries.add(new TIFFImageWriter.TIFFEntry(TIFF.TAG_SAMPLES_PER_PIXEL, 4));
|
||||
entries.add(new TIFFImageWriter.TIFFEntry(TIFF.TAG_BITS_PER_SAMPLE, new int[] {8, 8, 8})); // This is incorrect, just making sure the correct value is selected
|
||||
|
||||
IIOMetadataNode chromaNode = new TIFFImageMetadata(entries).getStandardChromaNode();
|
||||
assertNotNull(chromaNode);
|
||||
|
||||
IIOMetadataNode numChannels = (IIOMetadataNode) chromaNode.getElementsByTagName("NumChannels").item(0);
|
||||
assertEquals("4", numChannels.getAttribute("value"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStandardChromaSamplesPerPixelFallbackBitsPerSample() {
|
||||
Set<Entry> entries = new HashSet<>();
|
||||
entries.add(new TIFFImageWriter.TIFFEntry(TIFF.TAG_PHOTOMETRIC_INTERPRETATION, TIFFBaseline.PHOTOMETRIC_RGB));
|
||||
entries.add(new TIFFImageWriter.TIFFEntry(TIFF.TAG_BITS_PER_SAMPLE, new int[] {8, 8, 8}));
|
||||
|
||||
IIOMetadataNode chromaNode = new TIFFImageMetadata(entries).getStandardChromaNode();
|
||||
assertNotNull(chromaNode);
|
||||
|
||||
IIOMetadataNode numChannels = (IIOMetadataNode) chromaNode.getElementsByTagName("NumChannels").item(0);
|
||||
assertEquals("3", numChannels.getAttribute("value"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStandardChromaSamplesPerPixelFallbackDefault() {
|
||||
Set<Entry> entries = new HashSet<>();
|
||||
entries.add(new TIFFImageWriter.TIFFEntry(TIFF.TAG_PHOTOMETRIC_INTERPRETATION, TIFFBaseline.PHOTOMETRIC_BLACK_IS_ZERO));
|
||||
|
||||
IIOMetadataNode chromaNode = new TIFFImageMetadata(entries).getStandardChromaNode();
|
||||
assertNotNull(chromaNode);
|
||||
IIOMetadataNode numChannels = (IIOMetadataNode) chromaNode.getElementsByTagName("NumChannels").item(0);
|
||||
assertEquals("1", numChannels.getAttribute("value"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStandardDataBitsPerSampleFallbackDefault() {
|
||||
Set<Entry> entries = new HashSet<>();
|
||||
entries.add(new TIFFImageWriter.TIFFEntry(TIFF.TAG_PHOTOMETRIC_INTERPRETATION, TIFFBaseline.PHOTOMETRIC_BLACK_IS_ZERO));
|
||||
|
||||
IIOMetadataNode dataNode = new TIFFImageMetadata(entries).getStandardDataNode();
|
||||
assertNotNull(dataNode);
|
||||
IIOMetadataNode numChannels = (IIOMetadataNode) dataNode.getElementsByTagName("BitsPerSample").item(0);
|
||||
assertEquals("1", numChannels.getAttribute("value"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStandardNodeSamplesPerPixelFallbackDefault() {
|
||||
Set<Entry> entries = new HashSet<>();
|
||||
entries.add(new TIFFImageWriter.TIFFEntry(TIFF.TAG_PHOTOMETRIC_INTERPRETATION, TIFFBaseline.PHOTOMETRIC_RGB));
|
||||
|
||||
// Just to make sure we haven't accidentally missed something
|
||||
IIOMetadataNode standardTree = (IIOMetadataNode) new TIFFImageMetadata(entries).getAsTree(IIOMetadataFormatImpl.standardMetadataFormatName);
|
||||
assertNotNull(standardTree);
|
||||
}
|
||||
|
||||
// TODO: Test that failed set leaves metadata unchanged
|
||||
|
||||
private void assertSingleNodeWithValue(final NodeList fields, final int tag, int type, final String... expectedValue) {
|
||||
String tagNumber = String.valueOf(tag);
|
||||
String typeName = StringUtil.capitalize(TIFF.TYPE_NAMES[type].toLowerCase());
|
||||
@@ -505,8 +567,6 @@ public class TIFFImageMetadataTest {
|
||||
assertTrue("No tag " + tagNumber + " found", foundTag);
|
||||
}
|
||||
|
||||
// TODO: Test that failed set leaves metadata unchanged
|
||||
|
||||
static void createTIFFFieldNode(final IIOMetadataNode parentIFDNode, int tag, short type, Object value) {
|
||||
IIOMetadataNode fieldNode = new IIOMetadataNode("TIFFField");
|
||||
parentIFDNode.appendChild(fieldNode);
|
||||
|
||||
Reference in New Issue
Block a user