Merge pull request #429 from ikhaldeev/fix-extra-samples-alpha

Fix getAlphaRaster for ExtraSamplesColorModel (TIFFImageReader)
This commit is contained in:
Harald Kuhr 2018-07-02 10:04:02 +02:00 committed by GitHub
commit 7cb1c6811a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 0 deletions

View File

@ -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);
}
}

View File

@ -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<TIFFImageReader
}
}
@Test
public void testAlphaRasterForMultipleExtraSamples() throws IOException {
ImageReader reader = createReader();
try (ImageInputStream stream = ImageIO.createImageInputStream(getClassLoaderResource("/tiff/extra-channels.tif"))) {
reader.setInput(stream);
BufferedImage image = reader.read(0);
assertNotNull(image);
assertEquals(0x00, image.getRGB(0, 0));
assertEquals(0xf5, (image.getRGB(50, 50) & 0xff000000) >>> 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