From 582416760099bb11ff04c0cab110e034f45b669c Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Tue, 8 Feb 2022 08:43:21 +0100 Subject: [PATCH] IFF: Simplified aspect. (cherry picked from commit 92bc9c73f6198bcb9f37967b167cb6db83b6033d) --- .../imageio/plugins/iff/Form.java | 30 +++++++------------ .../imageio/plugins/iff/IFFImageMetadata.java | 4 +-- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/Form.java b/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/Form.java index fcc79056..1462d237 100644 --- a/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/Form.java +++ b/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/Form.java @@ -27,8 +27,7 @@ abstract class Form { abstract int width(); abstract int height(); - abstract int xAspect(); - abstract int yAspect(); + abstract float aspect(); abstract int bitplanes(); abstract int compressionType(); @@ -111,7 +110,7 @@ abstract class Form { private final CAMGChunk viewMode; private final CMAPChunk colorMap; private final AbstractMultiPaletteChunk multiPalette; - private final XS24Chunk thumbnail; + private final XS24Chunk thumbnail; // TVPaint puts these into normal IFF ILBM 24 bit files as well as DEEP/TVPP private final BODYChunk body; ILBMForm(int formType) { @@ -149,13 +148,8 @@ abstract class Form { } @Override - int xAspect() { - return bitmapHeader.xAspect; - } - - @Override - int yAspect() { - return bitmapHeader.yAspect; + float aspect() { + return bitmapHeader.yAspect == 0 ? 0 : (bitmapHeader.xAspect / (float) bitmapHeader.yAspect); } @Override @@ -343,13 +337,8 @@ abstract class Form { } @Override - int xAspect() { - return deepGlobal.xAspect; - } - - @Override - int yAspect() { - return deepGlobal.yAspect; + float aspect() { + return deepGlobal.yAspect == 0 ? 0 : deepGlobal.xAspect / (float) deepGlobal.yAspect; } @Override @@ -413,9 +402,10 @@ abstract class Form { return new DEEPForm(formType, deepGlobal, deepLocation, deepPixel, (XS24Chunk) chunk, body); } else if (chunk instanceof BODYChunk) { - if (body != null) { - throw new IIOException("Multiple " + toChunkStr(chunk.chunkId) + " chunks not allowed"); - } + // TODO: Make a better approach! +// if (body != null) { +// throw new IIOException("Multiple " + toChunkStr(chunk.chunkId) + " chunks not allowed"); +// } return new DEEPForm(formType, deepGlobal, deepLocation, deepPixel, thumbnail, (BODYChunk) chunk); } diff --git a/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/IFFImageMetadata.java b/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/IFFImageMetadata.java index 82b9e158..239c5215 100644 --- a/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/IFFImageMetadata.java +++ b/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/IFFImageMetadata.java @@ -210,7 +210,7 @@ final class IFFImageMetadata extends AbstractMetadata { @Override protected IIOMetadataNode getStandardDimensionNode() { - if (header.xAspect() == 0 || header.yAspect() == 0) { + if (header.aspect() == 0) { return null; } @@ -218,7 +218,7 @@ final class IFFImageMetadata extends AbstractMetadata { // PixelAspectRatio IIOMetadataNode pixelAspectRatio = new IIOMetadataNode("PixelAspectRatio"); - pixelAspectRatio.setAttribute("value", String.valueOf(header.xAspect() / (float) header.yAspect())); + pixelAspectRatio.setAttribute("value", String.valueOf(header.aspect())); dimension.appendChild(pixelAspectRatio); // TODO: HorizontalScreenSize?