diff --git a/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageWriterAbstractTest.java b/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageWriterAbstractTest.java index 4fbc57aa..c564dc06 100755 --- a/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageWriterAbstractTest.java +++ b/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageWriterAbstractTest.java @@ -34,6 +34,7 @@ import com.twelvemonkeys.imageio.stream.URLImageInputStreamSpi; import org.mockito.InOrder; +import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; @@ -84,6 +85,7 @@ public abstract class ImageWriterAbstractTest { protected static BufferedImage drawSomething(final BufferedImage image) { Graphics2D g = image.createGraphics(); + try { int width = image.getWidth(); int height = image.getHeight(); @@ -131,18 +133,54 @@ public abstract class ImageWriterAbstractTest { public void testWrite() throws IOException { ImageWriter writer = createWriter(); - for (RenderedImage testData : getTestData()) { - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + try { + for (RenderedImage testData : getTestData()) { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - try (ImageOutputStream stream = ImageIO.createImageOutputStream(buffer)) { - writer.setOutput(stream); - writer.write(drawSomething((BufferedImage) testData)); + try (ImageOutputStream stream = ImageIO.createImageOutputStream(buffer)) { + writer.setOutput(stream); + writer.write(drawSomething((BufferedImage) testData)); + } + catch (IOException e) { + throw new AssertionError(e.getMessage(), e); + } + + assertTrue(buffer.size() > 0, "No image data written"); } - catch (IOException e) { - throw new AssertionError(e.getMessage(), e); + } + finally { + writer.dispose(); + } + } + + @Test + public void testWriteRaster() throws IOException { + ImageWriter writer = createWriter(); + + try { + if (!writer.canWriteRasters()) { + return; } - assertTrue(buffer.size() > 0, "No image data written"); + ImageWriteParam param = writer.getDefaultWriteParam(); + + for (RenderedImage testData : getTestData()) { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + + try (ImageOutputStream stream = ImageIO.createImageOutputStream(buffer)) { + writer.setOutput(stream); + + writer.write(null, new IIOImage(testData.getTile(0, 0), null, null), param); + } + catch (IOException e) { + throw new AssertionError(e.getMessage(), e); + } + + assertTrue(buffer.size() > 0, "No image data written"); + } + } + finally { + writer.dispose(); } } diff --git a/imageio/imageio-dds/src/test/java/com/twelvemonkeys/imageio/plugins/dds/DDSImageWriterTest.java b/imageio/imageio-dds/src/test/java/com/twelvemonkeys/imageio/plugins/dds/DDSImageWriterTest.java index 8182ab14..96ac5acd 100644 --- a/imageio/imageio-dds/src/test/java/com/twelvemonkeys/imageio/plugins/dds/DDSImageWriterTest.java +++ b/imageio/imageio-dds/src/test/java/com/twelvemonkeys/imageio/plugins/dds/DDSImageWriterTest.java @@ -50,11 +50,22 @@ public class DDSImageWriterTest extends ImageWriterAbstractTest ); } + @Test + void writeRasters() throws IOException { + ImageWriter writer = createWriter(); + + assertTrue(writer.canWriteRasters()); + + // Full tests in super class + } + @Test void writeMipmap() throws IOException { ImageWriter writer = createWriter(); try { + assertTrue(writer.canWriteSequence()); + List testData = getTestData(); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); int previousSize = 0; diff --git a/imageio/imageio-pnm/src/main/java/com/twelvemonkeys/imageio/plugins/pnm/TupleType.java b/imageio/imageio-pnm/src/main/java/com/twelvemonkeys/imageio/plugins/pnm/TupleType.java index 24c11e23..b8a91302 100755 --- a/imageio/imageio-pnm/src/main/java/com/twelvemonkeys/imageio/plugins/pnm/TupleType.java +++ b/imageio/imageio-pnm/src/main/java/com/twelvemonkeys/imageio/plugins/pnm/TupleType.java @@ -111,6 +111,7 @@ enum TupleType { static TupleType forPAM(Raster raster) { SampleModel sampleModel = raster.getSampleModel(); + switch (sampleModel.getTransferType()) { case DataBuffer.TYPE_BYTE: case DataBuffer.TYPE_USHORT: @@ -145,8 +146,12 @@ enum TupleType { return TupleType.RGB; } else if (bands == 4) { + // Ambiguous, could also be CMYK... return TupleType.RGB_ALPHA; } + else if (bands == 5) { + return TupleType.CMYK_ALPHA; + } // ...else fall through... } @@ -154,7 +159,7 @@ enum TupleType { } static TupleType forPAM(ImageTypeSpecifier type) { - // Support only 1 bit b/w, 8-16 bit gray and 8-16 bit/sample RGB + // Support only 1 bit b/w, 8-16 bit gray, 8-16 bit/sample RGB and 8-16 bit/sample CMYK switch (type.getBufferedImageType()) { // 1 bit b/w or b/w + a case BufferedImage.TYPE_BYTE_BINARY: