Minimal readRaster implementation.

This commit is contained in:
Harald Kuhr 2017-04-26 15:29:46 +02:00
parent 86fa76c17d
commit b8a5bbe309
2 changed files with 45 additions and 2 deletions

View File

@ -129,8 +129,7 @@ public final class TIFFImageReader extends ImageReaderBase {
// TODO: Tiling support (readTile, readTileRaster)
// TODO: Implement readAsRenderedImage to allow tiled RenderedImage?
// For some layouts, we could do reads super-fast with a memory mapped buffer.
// TODO: Implement readAsRaster directly (100% correctly)
// http://download.java.net/media/jai-imageio/javadoc/1.1/com/sun/media/imageio/plugins/tiff/package-summary.html#ImageMetadata
// TODO: Implement readRaster directly (100% correctly)
// TODOs Extension support
// TODO: Auto-rotate based on Orientation
@ -144,6 +143,7 @@ public final class TIFFImageReader extends ImageReaderBase {
// Source region
// Subsampling
// IIOMetadata (stay close to Sun's TIFF metadata)
// http://download.java.net/media/jai-imageio/javadoc/1.1/com/sun/media/imageio/plugins/tiff/package-summary.html#ImageMetadata
// Support ICCProfile
// Support PlanarConfiguration 2
// Support Compression 3 & 4 (CCITT T.4 & T.6)
@ -2219,6 +2219,16 @@ public final class TIFFImageReader extends ImageReaderBase {
return null;
}
@Override
public boolean canReadRaster() {
return true;
}
@Override
public Raster readRaster(int imageIndex, ImageReadParam param) throws IOException {
return read(imageIndex, param).getData();
}
// TODO: Tiling support
// isImageTiled
// getTileWidth

View File

@ -39,6 +39,7 @@ import javax.imageio.spi.ImageReaderSpi;
import javax.imageio.stream.ImageInputStream;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.io.IOException;
import java.nio.ByteOrder;
import java.util.Arrays;
@ -630,4 +631,36 @@ public class TIFFImageReaderTest extends ImageReaderAbstractTest<TIFFImageReader
assertEquals(ByteOrder.BIG_ENDIAN, streamMetadata.byteOrder);
}
}
@Test
public void testReadRaster() {
ImageReader reader = createReader();
for (TestData data : getTestData()) {
reader.setInput(data.getInputStream());
for (int i = 0; i < data.getImageCount(); i++) {
Raster raster = null;
try {
raster = reader.readRaster(i, null);
}
catch (Exception e) {
failBecause(String.format("Image %s index %s could not be read: %s", data.getInput(), i, e), e);
}
assertNotNull(String.format("Raster %s index %s was null!", data.getInput(), i), raster);
assertEquals(
String.format("Raster %s index %s has wrong width: %s", data.getInput(), i, raster.getWidth()),
data.getDimension(i).width,
raster.getWidth()
);
assertEquals(
String.format("Raster %s index %s has wrong height: %s", data.getInput(), i, raster.getHeight()),
data.getDimension(i).height, raster.getHeight()
);
}
}
}
}