diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/ExtraSamplesColorModel.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/ExtraSamplesColorModel.java index 10082da7..552ddf91 100644 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/ExtraSamplesColorModel.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/ExtraSamplesColorModel.java @@ -7,6 +7,7 @@ import java.awt.color.ColorSpace; import java.awt.image.ComponentColorModel; import java.awt.image.ComponentSampleModel; import java.awt.image.SampleModel; +import java.awt.image.WritableRaster; /** * ExtraSamplesColorModel. @@ -41,4 +42,19 @@ final class ExtraSamplesColorModel extends ComponentColorModel { // Must have the same number of components return numComponents == sm.getNumBands() && transferType == sm.getTransferType(); } + + @Override + public WritableRaster getAlphaRaster(WritableRaster raster) { + if (hasAlpha() == false) { + return null; + } + + int x = raster.getMinX(); + int y = raster.getMinY(); + int[] band = new int[1]; + band[0] = super.getNumComponents() - 1; + return raster.createWritableChild(x, y, raster.getWidth(), + raster.getHeight(), x, y, + band); + } } diff --git a/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderTest.java b/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderTest.java index 53ad946b..53f101c8 100644 --- a/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderTest.java +++ b/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderTest.java @@ -40,6 +40,7 @@ import javax.imageio.stream.ImageInputStream; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.Raster; +import java.awt.image.WritableRaster; import java.io.IOException; import java.nio.ByteOrder; import java.util.Arrays; @@ -586,6 +587,25 @@ public class TIFFImageReaderTest extends ImageReaderAbstractTest>> 24); + + int[] alpha = new int[1]; + WritableRaster alphaRaster = image.getAlphaRaster(); + assertEquals(0x00, alphaRaster.getPixel(0, 0, alpha)[0]); + assertEquals(0xf5, alphaRaster.getPixel(50, 50, alpha)[0]); + } + } + @Test public void testReadWithSubsampleParamPixelsJPEG() throws IOException { // Tiled "new style" JPEG diff --git a/imageio/imageio-tiff/src/test/resources/tiff/extra-channels.tif b/imageio/imageio-tiff/src/test/resources/tiff/extra-channels.tif new file mode 100755 index 00000000..d642e461 Binary files /dev/null and b/imageio/imageio-tiff/src/test/resources/tiff/extra-channels.tif differ