@Test public void testFlushOnAdapterDoesNotMoveFlushedPositionInBacking() throws IOException { MemoryCacheImageOutputStream backing = new MemoryCacheImageOutputStream(new ByteArrayOutputStream()); IIOOutputStreamAdapter adapter = new IIOOutputStreamAdapter(backing); // Sanity check assertEquals(0, backing.getFlushedPosition()); // Write & flush adapter.write(0xCA); adapter.write(new byte[8]); adapter.write(0xFE); adapter.flush(); // Assertions assertEquals(10, backing.length()); assertEquals(10, backing.getStreamPosition()); assertEquals(0, backing.getFlushedPosition()); // Just make sure we can safely seek back to start and read data back backing.seek(0); assertEquals(0, backing.getStreamPosition()); // If this can be read, I think the contract of flush is also fulfilled (kind of) assertEquals(0xCA, backing.read()); assertEquals(8, backing.skipBytes(8)); assertEquals(0xFE, backing.read()); } }
public void testWriteToStream() throws IOException { final TiffLong tiffLong = new TiffLong(_TIFFLONG_MAX); final MemoryCacheImageOutputStream stream = new MemoryCacheImageOutputStream(new ByteArrayOutputStream()); tiffLong.write(stream); assertEquals(4, stream.length()); stream.seek(0); assertEquals(0xffffffff, stream.readInt()); }
public void testWriteToStream() throws IOException { final TiffShort tiffShort = new TiffShort(_TIFFSHORT_MAX); final MemoryCacheImageOutputStream stream = new MemoryCacheImageOutputStream(new ByteArrayOutputStream()); tiffShort.write(stream); assertEquals(2, stream.length()); stream.seek(0); assertEquals((short) 0xffff, stream.readShort()); }
public void testWriteToStream() throws IOException { final long numerator = _TIFFRATIONAL_MAX; final long denominator = _TIFFRATIONAL_MAX - 3; final TiffRational tiffRational = new TiffRational(numerator, denominator); final MemoryCacheImageOutputStream stream = new MemoryCacheImageOutputStream(new ByteArrayOutputStream()); tiffRational.write(stream); assertEquals(8, stream.length()); stream.seek(0); assertEquals((int) numerator, stream.readInt()); assertEquals((int) denominator, stream.readInt()); }
public void testWrite_withOneProduct() throws Exception { final MemoryCacheImageOutputStream ios = new MemoryCacheImageOutputStream(new ByteArrayOutputStream()); _tiffHeader.write(ios); final long ifdSize = _tiffHeader.getIfdAt(0).getRequiredIfdSize(); final long valuesSize = _tiffHeader.getIfdAt(0).getRequiredReferencedValuesSize(); final long startIfd = TiffHeader.FIRST_IFD_OFFSET.getValue(); final long expectedStreamLength = startIfd + ifdSize + valuesSize; final long expectedNextIFDOffset = 0; assertEquals(expectedStreamLength, ios.length()); ios.seek(startIfd + ifdSize - 4); assertEquals(expectedNextIFDOffset, ios.readInt()); }
public void testWriteBandRasterData_WithOutHeader() throws IOException { final ProductData data = ProductData.createInstance(ProductData.TYPE_UINT32, _WIDTH * _HEIGHT); final Band band = new Band("b1", ProductData.TYPE_UINT32, _WIDTH, _HEIGHT); _product.addBand(band); final GeoTiffBandWriter bandWriter = new GeoTiffBandWriter(new TiffIFD(_product), _ios, _product); bandWriter.writeBandRasterData(band, 0, 0, _WIDTH, _HEIGHT, data, ProgressMonitor.NULL); final long expSize = _WIDTH * _HEIGHT * 4; assertEquals(expSize, _ios.length()); }
public void testWriteToStream_OneTiffShortValue() throws IOException { final TiffDirectoryEntry entry = new TiffDirectoryEntry(new TiffShort(232), new TiffShort(28)); final MemoryCacheImageOutputStream ios = new MemoryCacheImageOutputStream(new ByteArrayOutputStream()); entry.write(ios); assertEquals(12, ios.length()); ios.seek(0); assertEquals(232, ios.readShort()); assertEquals(TiffType.SHORT_TYPE, ios.readShort()); assertEquals(1, ios.readInt()); assertEquals(28, ios.readShort()); assertEquals(0, ios.readShort()); }
public void testWriteToStream_TwoTiffShortValue() throws IOException { final TiffShort[] values = new TiffShort[]{new TiffShort(28), new TiffShort(235)}; final TiffDirectoryEntry entry = new TiffDirectoryEntry(new TiffShort(232), values); final MemoryCacheImageOutputStream ios = new MemoryCacheImageOutputStream(new ByteArrayOutputStream()); entry.write(ios); assertEquals(12, ios.length()); ios.seek(0); assertEquals(232, ios.readShort()); assertEquals(TiffType.SHORT_TYPE, ios.readShort()); assertEquals(values.length, ios.readInt()); for (int i = 0; i < values.length; i++) { assertEquals("at index [" + i + "] ", values[i].getValue(), ios.readShort()); } }
public void testWrite_withTwoProducts() throws Exception { final Product p1 = new Product("p1", "type", 10, 12); final Product p2 = new Product("p2", "type", 8, 6); p1.addBand("b1", ProductData.TYPE_INT16); p2.addBand("b1", ProductData.TYPE_UINT16); final TiffHeader tiffHeader = new TiffHeader(new Product[]{p1, p2}); final TiffIFD ifd1 = tiffHeader.getIfdAt(0); final TiffIFD ifd2 = tiffHeader.getIfdAt(1); assertNotNull(ifd1); assertNotNull(ifd2); final long startFirstIfd = TiffHeader.FIRST_IFD_OFFSET.getValue(); final long firstIfdEntireSize = ifd1.getRequiredEntireSize(); final long secondIfdSize = ifd2.getRequiredIfdSize(); final long secondIfdValuesSize = ifd2.getRequiredReferencedValuesSize(); final long expectedStreamLength = startFirstIfd + firstIfdEntireSize + secondIfdSize + secondIfdValuesSize; final MemoryCacheImageOutputStream ios = new MemoryCacheImageOutputStream(new ByteArrayOutputStream()); tiffHeader.write(ios); assertEquals(expectedStreamLength, ios.length()); }
@Test public void testFlushOnAdapterDoesNotMoveFlushedPositionInBacking() throws IOException { MemoryCacheImageOutputStream backing = new MemoryCacheImageOutputStream(new ByteArrayOutputStream()); IIOOutputStreamAdapter adapter = new IIOOutputStreamAdapter(backing); // Sanity check assertEquals(0, backing.getFlushedPosition()); // Write & flush adapter.write(0xCA); adapter.write(new byte[8]); adapter.write(0xFE); adapter.flush(); // Assertions assertEquals(10, backing.length()); assertEquals(10, backing.getStreamPosition()); assertEquals(0, backing.getFlushedPosition()); // Just make sure we can safely seek back to start and read data back backing.seek(0); assertEquals(0, backing.getStreamPosition()); // If this can be read, I think the contract of flush is also fulfilled (kind of) assertEquals(0xCA, backing.read()); assertEquals(8, backing.skipBytes(8)); assertEquals(0xFE, backing.read()); } }
public void testWriteBandRasterData_WithUINT8() throws IOException { _product.addBand("b1", ProductData.TYPE_UINT8); final int startValue = 1; final ProductData data = createProductDataForBand(_product.getBand("b1"), startValue); final TiffHeader tiffHeader = new TiffHeader(new Product[]{_product}); final GeoTiffBandWriter bandWriter = new GeoTiffBandWriter(tiffHeader.getIfdAt(0), _ios, _product); tiffHeader.write(_ios); bandWriter.writeBandRasterData(_product.getBand("b1"), 0, 0, _WIDTH, _HEIGHT, data, ProgressMonitor.NULL); final TiffIFD ifd = tiffHeader.getIfdAt(0); final int firstIFDOffset = 10; final long expSize = ifd.getRequiredEntireSize() + firstIFDOffset; final TiffIFD tiffIFD = tiffHeader.getIfdAt(0); final TiffDirectoryEntry entry = tiffIFD.getEntry(TiffTag.STRIP_OFFSETS); final TiffLong[] stripOffsets = (TiffLong[]) entry.getValues(); assertEquals(expSize, _ios.length()); _ios.seek(stripOffsets[0].getValue()); for (int j = 0; j < _WIDTH * _HEIGHT; j++) { final int expValue = (startValue + j) & 0x000000FF; assertEquals("index at [" + j + "]", expValue, _ios.readUnsignedByte()); } }
public void testWriteBandRasterData_WithUINT32() throws IOException { _product.addBand("b1", ProductData.TYPE_UINT32); final int startValue = 1; final ProductData data = createProductDataForBand(_product.getBand("b1"), startValue); final TiffHeader tiffHeader = new TiffHeader(new Product[]{_product}); final GeoTiffBandWriter bandWriter = new GeoTiffBandWriter(tiffHeader.getIfdAt(0), _ios, _product); tiffHeader.write(_ios); bandWriter.writeBandRasterData(_product.getBand("b1"), 0, 0, _WIDTH, _HEIGHT, data, ProgressMonitor.NULL); final TiffIFD ifd = tiffHeader.getIfdAt(0); final int firstIFDOffset = 10; final long expSize = ifd.getRequiredEntireSize() + firstIFDOffset; final TiffIFD tiffIFD = tiffHeader.getIfdAt(0); final TiffDirectoryEntry entry = tiffIFD.getEntry(TiffTag.STRIP_OFFSETS); final TiffLong[] offsets = (TiffLong[]) entry.getValues(); assertEquals(expSize, _ios.length()); _ios.seek(offsets[0].getValue()); for (int j = 0; j < _WIDTH * _HEIGHT; j++) { final long expValue = (startValue + j); assertEquals("index at [" + j + "]", expValue, _ios.readUnsignedInt()); } }
public void testWriteBandRasterData_WithINT8() throws IOException { _product.addBand("b1", ProductData.TYPE_INT8); final int startValue = 1; final ProductData data = createProductDataForBand(_product.getBand("b1"), startValue); final TiffHeader tiffHeader = new TiffHeader(new Product[]{_product}); final GeoTiffBandWriter bandWriter = new GeoTiffBandWriter(tiffHeader.getIfdAt(0), _ios, _product); tiffHeader.write(_ios); bandWriter.writeBandRasterData(_product.getBand("b1"), 0, 0, _WIDTH, _HEIGHT, data, ProgressMonitor.NULL); final TiffIFD ifd = tiffHeader.getIfdAt(0); final int firstIFDOffset = 10; final long expSize = ifd.getRequiredEntireSize() + firstIFDOffset; final TiffIFD tiffIFD = tiffHeader.getIfdAt(0); final TiffDirectoryEntry entry = tiffIFD.getEntry(TiffTag.STRIP_OFFSETS); final TiffLong[] offsets = (TiffLong[]) entry.getValues(); assertEquals(expSize, _ios.length()); _ios.seek(offsets[0].getValue()); for (int j = 0; j < _WIDTH * _HEIGHT; j++) { final byte expValue = (byte) (startValue + j); assertEquals("index at [" + j + "]", expValue, _ios.readByte()); } }
public void testWriteBandRasterData_WithFLOAT64() throws IOException { _product.addBand("b1", ProductData.TYPE_FLOAT64); final double startValue = 1.5f; final ProductData data = createProductDataForBand(_product.getBand("b1"), startValue); final TiffHeader tiffHeader = new TiffHeader(new Product[]{_product}); final GeoTiffBandWriter bandWriter = new GeoTiffBandWriter(tiffHeader.getIfdAt(0), _ios, _product); tiffHeader.write(_ios); bandWriter.writeBandRasterData(_product.getBand("b1"), 0, 0, _WIDTH, _HEIGHT, data, ProgressMonitor.NULL); final TiffIFD ifd = tiffHeader.getIfdAt(0); final int firstIFDOffset = 10; final long expSize = ifd.getRequiredEntireSize() + firstIFDOffset; final TiffIFD tiffIFD = tiffHeader.getIfdAt(0); final TiffDirectoryEntry entry = tiffIFD.getEntry(TiffTag.STRIP_OFFSETS); final TiffLong[] offsets = (TiffLong[]) entry.getValues(); assertEquals(expSize, _ios.length()); _ios.seek(offsets[0].getValue()); for (int j = 0; j < _WIDTH * _HEIGHT; j++) { final float expValue = (float) (startValue + j); assertEquals("index at [" + j + "]", expValue, _ios.readFloat(), 1.0e-6); } }
public void testWriteBandRasterData_WithINT16() throws IOException { _product.addBand("b1", ProductData.TYPE_INT16); final int startValue = 1; final ProductData data = createProductDataForBand(_product.getBand("b1"), startValue); final TiffHeader tiffHeader = new TiffHeader(new Product[]{_product}); final GeoTiffBandWriter bandWriter = new GeoTiffBandWriter(tiffHeader.getIfdAt(0), _ios, _product); tiffHeader.write(_ios); bandWriter.writeBandRasterData(_product.getBand("b1"), 0, 0, _WIDTH, _HEIGHT, data, ProgressMonitor.NULL); final TiffIFD ifd = tiffHeader.getIfdAt(0); final int firstIFDOffset = 10; final long expSize = ifd.getRequiredEntireSize() + firstIFDOffset; final TiffIFD tiffIFD = tiffHeader.getIfdAt(0); final TiffDirectoryEntry entry = tiffIFD.getEntry(TiffTag.STRIP_OFFSETS); final TiffLong[] offsets = (TiffLong[]) entry.getValues(); assertEquals(expSize, _ios.length()); _ios.seek(offsets[0].getValue()); for (int j = 0; j < _WIDTH * _HEIGHT; j++) { final short expValue = (short) (startValue + j); assertEquals("index at [" + j + "]", expValue, _ios.readShort()); } }
public void testWriteBandRasterData_WithFLOAT32() throws IOException { _product.addBand("b1", ProductData.TYPE_FLOAT32); final float startValue = 1.5f; final ProductData data = createProductDataForBand(_product.getBand("b1"), startValue); final TiffHeader tiffHeader = new TiffHeader(new Product[]{_product}); final GeoTiffBandWriter bandWriter = new GeoTiffBandWriter(tiffHeader.getIfdAt(0), _ios, _product); tiffHeader.write(_ios); bandWriter.writeBandRasterData(_product.getBand("b1"), 0, 0, _WIDTH, _HEIGHT, data, ProgressMonitor.NULL); final TiffIFD ifd = tiffHeader.getIfdAt(0); final int firstIFDOffset = 10; final long expSize = ifd.getRequiredEntireSize() + firstIFDOffset; final TiffIFD tiffIFD = tiffHeader.getIfdAt(0); final TiffDirectoryEntry entry = tiffIFD.getEntry(TiffTag.STRIP_OFFSETS); final TiffLong[] offsets = (TiffLong[]) entry.getValues(); assertEquals(expSize, _ios.length()); _ios.seek(offsets[0].getValue()); for (int j = 0; j < _WIDTH * _HEIGHT; j++) { final float expValue = startValue + j; assertEquals("index at [" + j + "]", expValue, _ios.readFloat(), 1.0e-6); } }
public void testWriteBandRasterData_WithINT32() throws IOException { _product.addBand("b1", ProductData.TYPE_INT32); final int startValue = 1; final ProductData data = createProductDataForBand(_product.getBand("b1"), startValue); final TiffHeader tiffHeader = new TiffHeader(new Product[]{_product}); final GeoTiffBandWriter bandWriter = new GeoTiffBandWriter(tiffHeader.getIfdAt(0), _ios, _product); tiffHeader.write(_ios); bandWriter.writeBandRasterData(_product.getBand("b1"), 0, 0, _WIDTH, _HEIGHT, data, ProgressMonitor.NULL); final TiffIFD ifd = tiffHeader.getIfdAt(0); final int firstIFDOffset = 10; final long expSize = ifd.getRequiredEntireSize() + firstIFDOffset; final TiffIFD tiffIFD = tiffHeader.getIfdAt(0); final TiffDirectoryEntry entry = tiffIFD.getEntry(TiffTag.STRIP_OFFSETS); final TiffLong[] offsets = (TiffLong[]) entry.getValues(); assertEquals(expSize, _ios.length()); _ios.seek(offsets[0].getValue()); for (int j = 0; j < _WIDTH * _HEIGHT; j++) { final int expValue = startValue + j; assertEquals("index at [" + j + "]", expValue, _ios.readInt()); } }
public void testWriteBandRasterData_WithUINT16() throws IOException { _product.addBand("b1", ProductData.TYPE_UINT16); final int startValue = 1; final ProductData data = createProductDataForBand(_product.getBand("b1"), startValue); final TiffHeader tiffHeader = new TiffHeader(new Product[]{_product}); final GeoTiffBandWriter bandWriter = new GeoTiffBandWriter(tiffHeader.getIfdAt(0), _ios, _product); tiffHeader.write(_ios); bandWriter.writeBandRasterData(_product.getBand("b1"), 0, 0, _WIDTH, _HEIGHT, data, ProgressMonitor.NULL); final TiffIFD ifd = tiffHeader.getIfdAt(0); final int firstIFDOffset = 10; final long expSize = ifd.getRequiredEntireSize() + firstIFDOffset; final TiffIFD tiffIFD = tiffHeader.getIfdAt(0); final TiffDirectoryEntry entry = tiffIFD.getEntry(TiffTag.STRIP_OFFSETS); final TiffLong[] offsets = (TiffLong[]) entry.getValues(); assertEquals(expSize, _ios.length()); _ios.seek(offsets[0].getValue()); for (int j = 0; j < _WIDTH * _HEIGHT; j++) { final int expValue = (startValue + j) & 0x0000FFFF; assertEquals("index at [" + j + "]", expValue, _ios.readUnsignedShort()); } }
public void testWriteBandRasterData_INT16() throws IOException { _product.addBand("b1", ProductData.TYPE_INT16); final float scalingFactor = 1.2f; _product.getBand("b1").setScalingFactor(scalingFactor); final int startValue = 1; final ProductData data = createProductDataForBand(_product.getBand("b1"), startValue); final TiffHeader tiffHeader = new TiffHeader(new Product[]{_product}); final GeoTiffBandWriter bandWriter = new GeoTiffBandWriter(tiffHeader.getIfdAt(0), _ios, _product); tiffHeader.write(_ios); bandWriter.writeBandRasterData(_product.getBand("b1"), 0, 0, _WIDTH, _HEIGHT, data, ProgressMonitor.NULL); final TiffIFD ifd = tiffHeader.getIfdAt(0); final int firstIFDOffset = 10; final long expSize = ifd.getRequiredEntireSize() + firstIFDOffset; final TiffIFD tiffIFD = tiffHeader.getIfdAt(0); final TiffDirectoryEntry entry = tiffIFD.getEntry(TiffTag.STRIP_OFFSETS); final TiffLong[] offsets = (TiffLong[]) entry.getValues(); assertEquals(expSize, _ios.length()); _ios.seek(offsets[0].getValue()); for (int j = 0; j < _WIDTH * _HEIGHT; j++) { assertEquals("index at [" + j + "]", startValue + j, _ios.readChar(), 1.0e-6); } }
assertEquals(expSize, _ios.length()); _ios.seek(offsets[0].getValue()); for (int j = 0; j < _WIDTH * _HEIGHT; j++) {