From 8c93be05a59f19bf87c43aeacf20b605aeca53f1 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Fri, 26 Sep 2014 15:59:19 +0200 Subject: [PATCH] Better testing of source region reading. A few readers are failing for now, added @Ignore. --- .../plugins/svg/SVGImageReaderTestCase.java | 11 ++++++ .../plugins/wmf/WMFImageReaderTestCase.java | 10 +++++ .../util/ImageReaderAbstractTestCase.java | 38 +++++++++++++++++++ .../plugins/icns/ICNSImageReaderTest.java | 7 ++++ .../imageio/plugins/pict/PICTImageReader.java | 9 ++++- 5 files changed, 73 insertions(+), 2 deletions(-) diff --git a/imageio/imageio-batik/src/test/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderTestCase.java b/imageio/imageio-batik/src/test/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderTestCase.java index 26875bac..8324c311 100755 --- a/imageio/imageio-batik/src/test/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderTestCase.java +++ b/imageio/imageio-batik/src/test/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderTestCase.java @@ -29,10 +29,13 @@ package com.twelvemonkeys.imageio.plugins.svg; import com.twelvemonkeys.imageio.util.ImageReaderAbstractTestCase; +import org.junit.Ignore; +import org.junit.Test; import javax.imageio.spi.ImageReaderSpi; import java.awt.*; import java.awt.image.ImagingOpException; +import java.io.IOException; import java.util.Arrays; import java.util.List; @@ -77,6 +80,7 @@ public class SVGImageReaderTestCase extends ImageReaderAbstractTestCase getMIMETypes() { return Arrays.asList("image/x-wmf", "application/x-msmetafile"); } + + @Test + @Ignore("Known issue: Source region reading not supported") + @Override + public void testReadWithSourceRegionParamEqualImage() throws IOException { + super.testReadWithSourceRegionParamEqualImage(); + } } \ No newline at end of file diff --git a/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTestCase.java b/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTestCase.java index 1b08bd96..e5bbe69d 100644 --- a/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTestCase.java +++ b/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTestCase.java @@ -548,6 +548,44 @@ public abstract class ImageReaderAbstractTestCase { assertEquals("Read image has wrong height: " + image.getHeight(), 10, image.getHeight()); } + @Test + public void testReadWithSourceRegionParamEqualImage() throws IOException { + // Default invocation + assertReadWithSourceRegionParamEqualImage(new Rectangle(3, 3, 9, 9), getTestData().get(0), 0); + } + + protected void assertReadWithSourceRegionParamEqualImage(final Rectangle r, final TestData data, final int imageIndex) throws IOException { + ImageReader reader = createReader(); + reader.setInput(data.getInputStream()); + ImageReadParam param = reader.getDefaultReadParam(); + + // Read full image and get sub image for comparison + final BufferedImage roi = reader.read(imageIndex, param).getSubimage(r.x, r.y, r.width, r.height); + + param.setSourceRegion(r); + + final BufferedImage image = reader.read(imageIndex, param); + +// try { +// SwingUtilities.invokeAndWait(new Runnable() { +// public void run() { +// JPanel panel = new JPanel(new FlowLayout()); +// panel.add(new JLabel(new BufferedImageIcon(roi, r.width * 10, r.height * 10, true))); +// panel.add(new JLabel(new BufferedImageIcon(image, r.width * 10, r.height * 10, true))); +// JOptionPane.showConfirmDialog(null, panel); +// } +// }); +// } +// catch (Exception e) { +// throw new RuntimeException(e); +// } + + assertNotNull("Image was null!", image); + assertEquals("Read image has wrong width: " + image.getWidth(), r.width, image.getWidth()); + assertEquals("Read image has wrong height: " + image.getHeight(), r.height, image.getHeight()); + assertImageDataEquals("Images differ", roi, image); + } + @Test public void testReadWithSizeAndSourceRegionParam() { // TODO: Is this test correct??? diff --git a/imageio/imageio-icns/src/test/java/com/twelvemonkeys/imageio/plugins/icns/ICNSImageReaderTest.java b/imageio/imageio-icns/src/test/java/com/twelvemonkeys/imageio/plugins/icns/ICNSImageReaderTest.java index bd8acd6a..8dc95484 100644 --- a/imageio/imageio-icns/src/test/java/com/twelvemonkeys/imageio/plugins/icns/ICNSImageReaderTest.java +++ b/imageio/imageio-icns/src/test/java/com/twelvemonkeys/imageio/plugins/icns/ICNSImageReaderTest.java @@ -138,4 +138,11 @@ public class ICNSImageReaderTest extends ImageReaderAbstractTestCase { public void testReadWithSubsampleParamPixels() throws IOException { super.testReadWithSubsampleParamPixels(); } + + @Test + @Ignore("Known issue: Source region reading not supported") + @Override + public void testReadWithSourceRegionParamEqualImage() throws IOException { + super.testReadWithSourceRegionParamEqualImage(); + } } diff --git a/imageio/imageio-pict/src/main/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReader.java b/imageio/imageio-pict/src/main/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReader.java index b1270186..f1ed38d8 100644 --- a/imageio/imageio-pict/src/main/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReader.java +++ b/imageio/imageio-pict/src/main/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReader.java @@ -2623,8 +2623,13 @@ public class PICTImageReader extends ImageReaderBase { Graphics2D g = image.createGraphics(); try { // TODO: Might need to clear background - - g.setTransform(AffineTransform.getScaleInstance(screenImageXRatio / subX, screenImageYRatio / subY)); + AffineTransform instance = new AffineTransform(); + if (pParam != null && pParam.getSourceRegion() != null) { + Rectangle rectangle = pParam.getSourceRegion(); + instance.translate(-rectangle.x, -rectangle.y); + } + instance.scale(screenImageXRatio / subX, screenImageYRatio / subY); + g.setTransform(instance); // try { drawOnto(g); // }