#400 Fixed minor issues in metadata. Added Document node with version.

This commit is contained in:
Harald Kuhr 2018-01-09 19:50:19 +01:00
parent 27a6ae6ffc
commit 39277697a6

View File

@ -47,6 +47,7 @@ final class PCXMetadata extends AbstractMetadata {
IIOMetadataNode chroma = new IIOMetadataNode("Chroma"); IIOMetadataNode chroma = new IIOMetadataNode("Chroma");
IndexColorModel palette = null; IndexColorModel palette = null;
boolean gray = false;
IIOMetadataNode csType = new IIOMetadataNode("ColorSpaceType"); IIOMetadataNode csType = new IIOMetadataNode("ColorSpaceType");
switch (header.getBitsPerPixel()) { switch (header.getBitsPerPixel()) {
@ -58,13 +59,14 @@ final class PCXMetadata extends AbstractMetadata {
break; break;
case 8: case 8:
// We may have IndexColorModel here for 1 channel images // We may have IndexColorModel here for 1 channel images
if (header.getChannels() == 1 && header.getPaletteInfo() != PCX.PALETTEINFO_GRAY) { if (header.getChannels() == 1 && vgaPalette != null) {
palette = vgaPalette; palette = vgaPalette;
csType.setAttribute("name", "RGB"); csType.setAttribute("name", "RGB");
break; break;
} }
if (header.getChannels() == 1) { if (header.getChannels() == 1) {
csType.setAttribute("name", "GRAY"); csType.setAttribute("name", "GRAY");
gray = true;
break; break;
} }
csType.setAttribute("name", "RGB"); csType.setAttribute("name", "RGB");
@ -81,6 +83,15 @@ final class PCXMetadata extends AbstractMetadata {
chroma.appendChild(csType); chroma.appendChild(csType);
// NOTE: Channels in chroma node reflects channels in color model, not data! (see data node)
IIOMetadataNode numChannels = new IIOMetadataNode("NumChannels");
numChannels.setAttribute("value", gray ? "1" : "3");
chroma.appendChild(numChannels);
IIOMetadataNode blackIsZero = new IIOMetadataNode("BlackIsZero");
blackIsZero.setAttribute("value", "TRUE");
chroma.appendChild(blackIsZero);
if (palette != null) { if (palette != null) {
IIOMetadataNode paletteNode = new IIOMetadataNode("Palette"); IIOMetadataNode paletteNode = new IIOMetadataNode("Palette");
chroma.appendChild(paletteNode); chroma.appendChild(paletteNode);
@ -97,15 +108,6 @@ final class PCXMetadata extends AbstractMetadata {
} }
} }
// TODO: Channels in chroma node should reflect channels in color model, not data! (see data node)
IIOMetadataNode numChannels = new IIOMetadataNode("NumChannels");
numChannels.setAttribute("value", Integer.toString(header.getChannels()));
chroma.appendChild(numChannels);
IIOMetadataNode blackIsZero = new IIOMetadataNode("BlackIsZero");
blackIsZero.setAttribute("value", "TRUE");
chroma.appendChild(blackIsZero);
return chroma; return chroma;
} }
@ -141,9 +143,25 @@ final class PCXMetadata extends AbstractMetadata {
node.appendChild(planarConfiguration); node.appendChild(planarConfiguration);
} }
// TODO: SampleFormat value = Index if colormapped/palette data
IIOMetadataNode sampleFormat = new IIOMetadataNode("SampleFormat"); IIOMetadataNode sampleFormat = new IIOMetadataNode("SampleFormat");
sampleFormat.setAttribute("value", "UnsignedIntegral");
switch (header.getBitsPerPixel()) {
case 1:
case 2:
case 4:
sampleFormat.setAttribute("value", "Index");
break;
case 8:
if (header.getChannels() == 1 && vgaPalette != null) {
sampleFormat.setAttribute("value", "Index");
break;
}
// Else fall through for GRAY
default:
sampleFormat.setAttribute("value", "UnsignedIntegral");
break;
}
node.appendChild(sampleFormat); node.appendChild(sampleFormat);
IIOMetadataNode bitsPerSample = new IIOMetadataNode("BitsPerSample"); IIOMetadataNode bitsPerSample = new IIOMetadataNode("BitsPerSample");
@ -185,7 +203,16 @@ final class PCXMetadata extends AbstractMetadata {
return dimension; return dimension;
} }
// TODO: document node with version @Override
protected IIOMetadataNode getStandardDocumentNode() {
IIOMetadataNode dimension = new IIOMetadataNode("Document");
IIOMetadataNode imageOrientation = new IIOMetadataNode("FormatVersion");
imageOrientation.setAttribute("value", String.valueOf(header.getVersion()));
dimension.appendChild(imageOrientation);
return dimension;
}
// No text node // No text node