Java Code Examples for javax.imageio.stream.ImageOutputStream#mark()
The following examples show how to use
javax.imageio.stream.ImageOutputStream#mark() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: ChannelImageOutputStreamTest.java From sis with Apache License 2.0 | 6 votes |
/** * Tests {@link ChannelImageOutputStream#mark()} and {@code reset()} methods. * * @throws IOException should never happen since we read and write in memory only. */ @Test public void testMarkAndReset() throws IOException { initialize("testMarkAndReset", STREAM_LENGTH, 1000); // We need a larger buffer for this test. final ImageOutputStream referenceStream = (ImageOutputStream) this.referenceStream; /* * Fill both streams with random data. * During this process, randomly takes mark. */ int nbMarks = 0; for (int i=0; i<STREAM_LENGTH; i++) { if (randomEvent() && i < STREAM_LENGTH - Long.BYTES) { referenceStream.mark(); testedStream.mark(); nbMarks++; } final int v = random.nextInt(256); referenceStream.writeByte(v); testedStream.writeByte(v); } compareMarks(nbMarks); }
Example 2
Source File: ChannelImageOutputStreamTest.java From sis with Apache License 2.0 | 5 votes |
/** * Tests {@link ChannelImageOutputStream#flushBefore(long)}. * * @throws IOException should never happen since we read and write in memory only. */ @Test @DependsOnMethod("testMarkAndReset") public void testFlushBefore() throws IOException { final int N = 50; // Number of long values to write. initialize("testFlushBefore", N*Long.BYTES, 200); final ImageOutputStream referenceStream = (ImageOutputStream) this.referenceStream; for (int i=0; i<N; i++) { switch (i) { case 20: case 30: case 40: case 45: { referenceStream.mark(); testedStream.mark(); break; } case 10: { referenceStream.flushBefore(5 * Long.BYTES); testedStream.flushBefore(5 * Long.BYTES); break; } case 35: { referenceStream.flushBefore(32 * Long.BYTES); testedStream.flushBefore(32 * Long.BYTES); break; } } final long v = random.nextLong(); referenceStream.writeLong(v); testedStream.writeLong(v); } compareMarks(2); }
Example 3
Source File: TIFFIFD.java From Bytecoder with Apache License 2.0 | 4 votes |
public void writeToStream(ImageOutputStream stream) throws IOException { int numFields = getNumTIFFFields(); stream.writeShort(numFields); long nextSpace = stream.getStreamPosition() + 12*numFields + 4; Iterator<TIFFField> iter = iterator(); while (iter.hasNext()) { TIFFField f = iter.next(); TIFFTag tag = f.getTag(); int type = f.getType(); int count = f.getCount(); // Deal with unknown tags if (type == 0) { type = TIFFTag.TIFF_UNDEFINED; } int size = count*TIFFTag.getSizeOfType(type); if (type == TIFFTag.TIFF_ASCII) { int chars = 0; for (int i = 0; i < count; i++) { chars += f.getAsString(i).length() + 1; } count = chars; size = count; } int tagNumber = f.getTagNumber(); stream.writeShort(tagNumber); stream.writeShort(type); stream.writeInt(count); // Write a dummy value to fill space stream.writeInt(0); stream.mark(); // Mark beginning of next field stream.skipBytes(-4); long pos; if (size > 4 || tag.isIFDPointer()) { // Ensure IFD or value is written on a word boundary nextSpace = (nextSpace + 3) & ~0x3; stream.writeInt((int)nextSpace); stream.seek(nextSpace); pos = nextSpace; if (tag.isIFDPointer() && f.hasDirectory()) { TIFFIFD subIFD = getDirectoryAsIFD(f.getDirectory()); subIFD.writeToStream(stream); nextSpace = subIFD.lastPosition; } else { writeTIFFFieldToStream(f, stream); nextSpace = stream.getStreamPosition(); } } else { pos = stream.getStreamPosition(); writeTIFFFieldToStream(f, stream); } // If we are writing the data for the // StripByteCounts, TileByteCounts, StripOffsets, // TileOffsets, JPEGInterchangeFormat, or // JPEGInterchangeFormatLength fields, record the current stream // position for backpatching if (tagNumber == BaselineTIFFTagSet.TAG_STRIP_BYTE_COUNTS || tagNumber == BaselineTIFFTagSet.TAG_TILE_BYTE_COUNTS || tagNumber == BaselineTIFFTagSet.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH) { this.stripOrTileByteCountsPosition = pos; } else if (tagNumber == BaselineTIFFTagSet.TAG_STRIP_OFFSETS || tagNumber == BaselineTIFFTagSet.TAG_TILE_OFFSETS || tagNumber == BaselineTIFFTagSet.TAG_JPEG_INTERCHANGE_FORMAT) { this.stripOrTileOffsetsPosition = pos; } stream.reset(); // Go to marked position of next field } this.lastPosition = nextSpace; }
Example 4
Source File: TIFFIFD.java From openjdk-jdk9 with GNU General Public License v2.0 | 4 votes |
public void writeToStream(ImageOutputStream stream) throws IOException { int numFields = getNumTIFFFields(); stream.writeShort(numFields); long nextSpace = stream.getStreamPosition() + 12*numFields + 4; Iterator<TIFFField> iter = iterator(); while (iter.hasNext()) { TIFFField f = iter.next(); TIFFTag tag = f.getTag(); int type = f.getType(); int count = f.getCount(); // Deal with unknown tags if (type == 0) { type = TIFFTag.TIFF_UNDEFINED; } int size = count*TIFFTag.getSizeOfType(type); if (type == TIFFTag.TIFF_ASCII) { int chars = 0; for (int i = 0; i < count; i++) { chars += f.getAsString(i).length() + 1; } count = chars; size = count; } int tagNumber = f.getTagNumber(); stream.writeShort(tagNumber); stream.writeShort(type); stream.writeInt(count); // Write a dummy value to fill space stream.writeInt(0); stream.mark(); // Mark beginning of next field stream.skipBytes(-4); long pos; if (size > 4 || tag.isIFDPointer()) { // Ensure IFD or value is written on a word boundary nextSpace = (nextSpace + 3) & ~0x3; stream.writeInt((int)nextSpace); stream.seek(nextSpace); pos = nextSpace; if (tag.isIFDPointer() && f.hasDirectory()) { TIFFIFD subIFD = getDirectoryAsIFD(f.getDirectory()); subIFD.writeToStream(stream); nextSpace = subIFD.lastPosition; } else { writeTIFFFieldToStream(f, stream); nextSpace = stream.getStreamPosition(); } } else { pos = stream.getStreamPosition(); writeTIFFFieldToStream(f, stream); } // If we are writing the data for the // StripByteCounts, TileByteCounts, StripOffsets, // TileOffsets, JPEGInterchangeFormat, or // JPEGInterchangeFormatLength fields, record the current stream // position for backpatching if (tagNumber == BaselineTIFFTagSet.TAG_STRIP_BYTE_COUNTS || tagNumber == BaselineTIFFTagSet.TAG_TILE_BYTE_COUNTS || tagNumber == BaselineTIFFTagSet.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH) { this.stripOrTileByteCountsPosition = pos; } else if (tagNumber == BaselineTIFFTagSet.TAG_STRIP_OFFSETS || tagNumber == BaselineTIFFTagSet.TAG_TILE_OFFSETS || tagNumber == BaselineTIFFTagSet.TAG_JPEG_INTERCHANGE_FORMAT) { this.stripOrTileOffsetsPosition = pos; } stream.reset(); // Go to marked position of next field } this.lastPosition = nextSpace; }