Merge remote-tracking branch 'origin/master'

This commit is contained in:
Harald Kuhr
2018-08-18 12:51:30 +02:00
6 changed files with 76 additions and 5 deletions

View File

@@ -69,6 +69,12 @@ public final class PICTImageReaderSpi extends ImageReaderSpiBase {
else {
// Skip header 512 bytes for file-based streams
stream.reset();
// If we don't mark again here, the reset call in the finally block will:
// A) do nothing
// B) eat marks created in the stream previously
stream.mark();
skipNullHeader(stream);
}

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