Class TIFFDecompressor
- Direct Known Subclasses:
TIFFDeflateDecompressor,TIFFFaxDecompressor,TIFFJPEGDecompressor,TIFFLSBDecompressor,TIFFLZWDecompressor,TIFFNullDecompressor,TIFFPackBitsDecompressor,TIFFYCbCrDecompressor
The mapping between source and destination Y coordinates is given by the equations:
dx = (sx - sourceXOffset)/subsampleX + dstXOffset; dy = (sy - sourceYOffset)/subsampleY + dstYOffset;Note that the mapping from source coordinates to destination coordinates is not one-to-one if subsampling is being used, since only certain source pixels are to be copied to the destination. However, * the inverse mapping is always one-to-one:
sx = (dx - dstXOffset)*subsampleX + sourceXOffset; sy = (dy - dstYOffset)*subsampleY + sourceYOffset;
Decompressors may be written with various levels of complexity.
The most complex decompressors will override the
decode method, and will perform all the work of
decoding, subsampling, offsetting, clipping, and format conversion.
This approach may be the most efficient, since it is possible to
avoid the use of extra image buffers, and it may be possible to
avoid decoding portions of the image that will not be copied into
the destination.
Less ambitious decompressors may override the
decodeRaw method, which is responsible for
decompressing the entire tile or strip into a byte array (or other
appropriate datatype). The default implementation of
decode will perform all necessary setup of buffers,
call decodeRaw to perform the actual decoding, perform
subsampling, and copy the results into the final destination image.
Where possible, it will pass the real image buffer to
decodeRaw in order to avoid making an extra copy.
Slightly more ambitious decompressors may override
decodeRaw, but avoid writing pixels that will be
discarded in the subsampling phase.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected intThe height of the source region that will actually be copied into the destination image, taking into account all susbampling, offsetting, and clipping.protected intThe X coordinate of the upper-left source pixel that will actually be copied into the destination image, taking into account all subsampling, offsetting, and clipping.protected intThe Y coordinate of the upper-left source pixel that will actually be copied into the destination image, taking into account all subsampling, offsetting, and clipping.protected intThe width of the source region that will actually be copied into the destination image, taking into account all susbampling, offsetting, and clipping.protected int[]The value of theBitsPerSampletag.protected intThe number of bytes of data from the sourceImageInputStreamto be decompressed.protected TIFFColorConverterATIFFColorConverterobject describing the color space of the encoded pixel data, ornull.protected char[]The value of theColorMaptag.protected intThe value of theCompressiontag.protected int[]The sequence of destination bands to receive the source data.protected intThe height of the region of the destination image to be written.protected intThe X coordinate of the upper left pixel to be written in the destination image.protected intThe Y coordinate of the upper left pixel to be written in the destination image.protected intThe width of the region of the destination image to be written.protected intThe horizontal destination offset used, along withsourceXOffsetandsubsampleX, to map between horizontal source and destination pixel coordinates.protected intThe vertical destination offset used, along withsourceYOffsetandsubsampleY, to map between horizontal source and destination pixel coordinates.protected int[]The value of theExtraSamplestag.protected BufferedImageThe final destination image.protected IIOMetadataTheIIOMetadataobject containing metadata for the current image.protected longThe offset in the sourceImageInputStreamof the start of the data to be decompressed.protected intThe value of thePhotometricInterpretationtag.protected booleantrueif the image is encoded using separate planes.protected BufferedImageABufferedImagefor thedecodeRawmethod to write into.protected ImageReaderTheImageReadercalling thisTIFFDecompressor.protected int[]The value of theSampleFormattag.protected intThe value of theSamplesPerPixeltag.protected int[]The sequence of source bands that are to be copied into the destination.protected intThe source X offset used, along withdstXOffsetandsubsampleX, to map between horizontal source and destination pixel coordinates.protected intThe source Y offset used, along withdstYOffsetandsubsampleY, to map between vertical source and destination pixel coordinates.protected intThe height of the source region being decoded from the source stream.protected intThe X coordinate of the upper-left pixel of the source region being decoded from the source stream.protected intThe Y coordinate of the upper-left pixel of the source region being decoded from the source stream.protected intThe width of the source region being decoded from the source stream.protected ImageInputStreamTheImageInputStreamcontaining the TIFF source data.protected intThe horizontal subsampling factor.protected intThe vertical subsampling factor. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidThis routine is called prior to a sequence of calls to thedecodemethod, in order to allow any necessary tables or other structures to be initialized based on metadata values.Creates aBufferedImagewhose underlying data array will be suitable for holding the raw decoded output of thedecodeRawmethod.voiddecode()Decodes the input bit stream (located in theImageInputStreamstream, at offsetoffset, and continuing forbyteCountbytes) into the outputBufferedImageimage.abstract voiddecodeRaw(byte[] b, int dstOffset, int bitsPerPixel, int scanlineStride) Decodes the source data into the providedbytearrayb, starting at the offset given bydstOffset.voiddecodeRaw(float[] f, int dstOffset, int bitsPerPixel, int scanlineStride) Decodes the source data into the providedfloatarrayf, starting at the offset given bydstOffset.voiddecodeRaw(int[] i, int dstOffset, int bitsPerPixel, int scanlineStride) Decodes the source data into the providedintarrayi, starting at the offset given bydstOffset.voiddecodeRaw(short[] s, int dstOffset, int bitsPerPixel, int scanlineStride) Decodes the source data into the providedshortarrays, starting at the offset given bydstOffset.Returns anImageTypeSpecifierdescribing an image whose underlying data array has the same format as the raw source pixel data.static ImageTypeSpecifiergetRawImageTypeSpecifier(int photometricInterpretation, int compression, int samplesPerPixel, int[] bitsPerSample, int[] sampleFormat, int[] extraSamples, char[] colorMap) A utility method that returns anImageTypeSpecifiersuitable for decoding an image with the given parameters.voidsetActiveSrcHeight(int activeSrcHeight) Sets the value of theactiveSrcHeightfield.voidsetActiveSrcMinX(int activeSrcMinX) Sets the value of theactiveSrcMinXfield.voidsetActiveSrcMinY(int activeSrcMinY) Sets the value of theactiveSrcMinYfield.voidsetActiveSrcWidth(int activeSrcWidth) Sets the value of theactiveSrcWidthfield.voidsetBitsPerSample(int[] bitsPerSample) Sets the value of thebitsPerSamplefield.voidsetByteCount(int byteCount) Sets the value of thebyteCountfield.voidsetColorConverter(TIFFColorConverter colorConverter) Sets theTIFFColorConverterobject describing the color space of the encoded data in the input stream.voidsetColorMap(char[] colorMap) Sets the value of thecolorMapfield.voidsetCompression(int compression) Sets the value of thecompressionfield.voidsetDestinationBands(int[] destinationBands) Sets the value of thedestinationBandsfield.voidsetDstHeight(int dstHeight) Sets the value of thedstHeightfield.voidsetDstMinX(int dstMinX) Sets the value of thedstMinXfield.voidsetDstMinY(int dstMinY) Sets the value of thedstMinYfield.voidsetDstWidth(int dstWidth) Sets the value of thedstWidthfield.voidsetDstXOffset(int dstXOffset) Sets the value of thedstXOffsetfield.voidsetDstYOffset(int dstYOffset) Sets the value of thedstYOffsetfield.voidsetExtraSamples(int[] extraSamples) Sets the value of theextraSamplesfield.voidsetImage(BufferedImage image) Sets the value of theimagefield.voidsetMetadata(IIOMetadata metadata) Sets the value of themetadatafield.voidsetOffset(long offset) Sets the value of theoffsetfield.voidsetPhotometricInterpretation(int photometricInterpretation) Sets the value of thephotometricInterpretationfield.voidsetPlanar(boolean planar) Sets the value of theplanarfield.voidsetReader(ImageReader reader) Sets the value of thereaderfield.voidsetSampleFormat(int[] sampleFormat) Sets the value of thesampleFormatfield.voidsetSamplesPerPixel(int samplesPerPixel) Sets the value of thesamplesPerPixelfield.voidsetSourceBands(int[] sourceBands) Sets the value of thesourceBandsfield.voidsetSourceXOffset(int sourceXOffset) Sets the value of thesourceXOffsetfield.voidsetSourceYOffset(int sourceYOffset) Sets the value of thesourceYOffset.voidsetSrcHeight(int srcHeight) Sets the value of thesrcHeightfield.voidsetSrcMinX(int srcMinX) Sets the value of thesrcMinXfield.voidsetSrcMinY(int srcMinY) Sets the value of thesrcMinYfield.voidsetSrcWidth(int srcWidth) Sets the value of thesrcWidthfield.voidsetStream(ImageInputStream stream) Sets the value of thestreamfield.voidsetSubsampleX(int subsampleX) Sets the value of thesubsampleXfield.voidsetSubsampleY(int subsampleY) Sets the value of thesubsampleYfield.
-
Field Details
-
reader
TheImageReadercalling thisTIFFDecompressor. -
metadata
TheIIOMetadataobject containing metadata for the current image. -
photometricInterpretation
protected int photometricInterpretationThe value of thePhotometricInterpretationtag. Legal values areBaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_WHITE_IS_ZERO,BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_BLACK_IS_ZERO,BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_RGB,BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_PALETTE_COLOR,BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_TRANSPARENCY_MASK,BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_Y_CB_CR,BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_CIELAB,BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_ICCLAB, or other value defined by a TIFF extension. -
compression
protected int compressionThe value of theCompressiontag. Legal values areBaselineTIFFTagSet.COMPRESSION_NONE,BaselineTIFFTagSet.COMPRESSION_CCITT_RLE,BaselineTIFFTagSet.COMPRESSION_CCITT_T_4,BaselineTIFFTagSet.COMPRESSION_CCITT_T_6,BaselineTIFFTagSet.COMPRESSION_LZW,BaselineTIFFTagSet.COMPRESSION_OLD_JPEG,BaselineTIFFTagSet.COMPRESSION_JPEG,BaselineTIFFTagSet.COMPRESSION_ZLIB,BaselineTIFFTagSet.COMPRESSION_PACKBITS,BaselineTIFFTagSet.COMPRESSION_DEFLATE, or other value defined by a TIFF extension. -
planar
protected boolean planartrueif the image is encoded using separate planes. -
samplesPerPixel
protected int samplesPerPixelThe value of theSamplesPerPixeltag. -
bitsPerSample
protected int[] bitsPerSampleThe value of theBitsPerSampletag. -
sampleFormat
protected int[] sampleFormatThe value of theSampleFormattag. Legal values areBaselineTIFFTagSet.SAMPLE_FORMAT_UNSIGNED_INTEGER,BaselineTIFFTagSet.SAMPLE_FORMAT_SIGNED_INTEGER,BaselineTIFFTagSet.SAMPLE_FORMAT_FLOATING_POINT,BaselineTIFFTagSet.SAMPLE_FORMAT_UNDEFINED, or other value defined by a TIFF extension. -
extraSamples
protected int[] extraSamplesThe value of theExtraSamplestag. Legal values areBaselineTIFFTagSet.EXTRA_SAMPLES_UNSPECIFIED,BaselineTIFFTagSet.EXTRA_SAMPLES_ASSOCIATED_ALPHA,BaselineTIFFTagSet.EXTRA_SAMPLES_UNASSOCIATED_ALPHA, or other value defined by a TIFF extension. -
colorMap
protected char[] colorMapThe value of theColorMaptag. -
stream
TheImageInputStreamcontaining the TIFF source data. -
offset
protected long offsetThe offset in the sourceImageInputStreamof the start of the data to be decompressed. -
byteCount
protected int byteCountThe number of bytes of data from the sourceImageInputStreamto be decompressed. -
srcMinX
protected int srcMinXThe X coordinate of the upper-left pixel of the source region being decoded from the source stream. This value is not affected by source subsampling. -
srcMinY
protected int srcMinYThe Y coordinate of the upper-left pixel of the source region being decoded from the source stream. This value is not affected by source subsampling. -
srcWidth
protected int srcWidthThe width of the source region being decoded from the source stream. This value is not affected by source subsampling. -
srcHeight
protected int srcHeightThe height of the source region being decoded from the source stream. This value is not affected by source subsampling. -
sourceXOffset
protected int sourceXOffsetThe source X offset used, along withdstXOffsetandsubsampleX, to map between horizontal source and destination pixel coordinates. -
dstXOffset
protected int dstXOffsetThe horizontal destination offset used, along withsourceXOffsetandsubsampleX, to map between horizontal source and destination pixel coordinates. See the comment forfor the mapping equations.sourceXOffset -
sourceYOffset
protected int sourceYOffsetThe source Y offset used, along withdstYOffsetandsubsampleY, to map between vertical source and destination pixel coordinates. -
dstYOffset
protected int dstYOffsetThe vertical destination offset used, along withsourceYOffsetandsubsampleY, to map between horizontal source and destination pixel coordinates. See the comment forfor the mapping equations.sourceYOffset -
subsampleX
protected int subsampleXThe horizontal subsampling factor. A factor of 1 means that every column is copied to the destination; a factor of 2 means that every second column is copied, etc. -
subsampleY
protected int subsampleYThe vertical subsampling factor. A factor of 1 means that every row is copied to the destination; a factor of 2 means that every second row is copied, etc. -
sourceBands
protected int[] sourceBandsThe sequence of source bands that are to be copied into the destination. -
destinationBands
protected int[] destinationBandsThe sequence of destination bands to receive the source data. -
rawImage
ABufferedImagefor thedecodeRawmethod to write into. -
image
The final destination image. -
dstMinX
protected int dstMinXThe X coordinate of the upper left pixel to be written in the destination image. -
dstMinY
protected int dstMinYThe Y coordinate of the upper left pixel to be written in the destination image. -
dstWidth
protected int dstWidthThe width of the region of the destination image to be written. -
dstHeight
protected int dstHeightThe height of the region of the destination image to be written. -
activeSrcMinX
protected int activeSrcMinXThe X coordinate of the upper-left source pixel that will actually be copied into the destination image, taking into account all subsampling, offsetting, and clipping. That is, the pixel at (activeSrcMinX,activeSrcMinY) is to be copied into the destination pixel at (dstMinX,dstMinY).The pixels in the source region to be copied are those with X coordinates of the form
activeSrcMinX + k*subsampleX, wherekis an integer such that0 <= k < dstWidth. -
activeSrcMinY
protected int activeSrcMinYThe Y coordinate of the upper-left source pixel that will actually be copied into the destination image, taking into account all subsampling, offsetting, and clipping.The pixels in the source region to be copied are those with Y coordinates of the form
activeSrcMinY + k*subsampleY, wherekis an integer such that0 <= k < dstHeight. -
activeSrcWidth
protected int activeSrcWidthThe width of the source region that will actually be copied into the destination image, taking into account all susbampling, offsetting, and clipping.The active source width will always be equal to
(dstWidth - 1)*subsampleX + 1. -
activeSrcHeight
protected int activeSrcHeightThe height of the source region that will actually be copied into the destination image, taking into account all susbampling, offsetting, and clipping.The active source height will always be equal to
(dstHeight - 1)*subsampleY + 1. -
colorConverter
ATIFFColorConverterobject describing the color space of the encoded pixel data, ornull.
-
-
Constructor Details
-
TIFFDecompressor
public TIFFDecompressor()
-
-
Method Details
-
getRawImageTypeSpecifier
public static ImageTypeSpecifier getRawImageTypeSpecifier(int photometricInterpretation, int compression, int samplesPerPixel, int[] bitsPerSample, int[] sampleFormat, int[] extraSamples, char[] colorMap) A utility method that returns anImageTypeSpecifiersuitable for decoding an image with the given parameters.- Parameters:
photometricInterpretation- the value of thePhotometricInterpretationfield.compression- the value of theCompressionfield.samplesPerPixel- the value of theSamplesPerPixelfield.bitsPerSample- the value of theBitsPerSamplefield.sampleFormat- the value of theSampleFormatfield.extraSamples- the value of theExtraSamplesfield.colorMap- the value of theColorMapfield.- Returns:
- a suitable
ImageTypeSpecifier, ornullif it is not possible to create one.
-
setReader
Sets the value of thereaderfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
reader- the currentImageReader.
-
setMetadata
Sets the value of themetadatafield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
metadata- theIIOMetadataobject for the image being read.
-
setPhotometricInterpretation
public void setPhotometricInterpretation(int photometricInterpretation) Sets the value of thephotometricInterpretationfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
photometricInterpretation- the photometric interpretation value.
-
setCompression
public void setCompression(int compression) Sets the value of thecompressionfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
compression- the compression type.
-
setPlanar
public void setPlanar(boolean planar) Sets the value of theplanarfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
planar-trueif the image to be decoded is stored in planar format.
-
setSamplesPerPixel
public void setSamplesPerPixel(int samplesPerPixel) Sets the value of thesamplesPerPixelfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
samplesPerPixel- the number of samples in each source pixel.
-
setBitsPerSample
public void setBitsPerSample(int[] bitsPerSample) Sets the value of thebitsPerSamplefield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
bitsPerSample- the number of bits for each source image sample.
-
setSampleFormat
public void setSampleFormat(int[] sampleFormat) Sets the value of thesampleFormatfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
sampleFormat- the format of the source image data, for example unsigned integer or floating-point.
-
setExtraSamples
public void setExtraSamples(int[] extraSamples) Sets the value of theextraSamplesfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
extraSamples- the interpretation of any samples in the source file beyond those used for basic color or grayscale information.
-
setColorMap
public void setColorMap(char[] colorMap) Sets the value of thecolorMapfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
colorMap- the color map to apply to the source data, as an array ofchars.
-
setStream
Sets the value of thestreamfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
stream- theImageInputStreamto be read.
-
setOffset
public void setOffset(long offset) Sets the value of theoffsetfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
offset- the offset of the beginning of the compressed data.
-
setByteCount
public void setByteCount(int byteCount) Sets the value of thebyteCountfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
byteCount- the number of bytes of compressed data.
-
setSrcMinX
public void setSrcMinX(int srcMinX) Sets the value of thesrcMinXfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
srcMinX- the minimum X coordinate of the source region being decoded, irrespective of how it will be copied into the destination.
-
setSrcMinY
public void setSrcMinY(int srcMinY) Sets the value of thesrcMinYfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
srcMinY- the minimum Y coordinate of the source region being decoded, irrespective of how it will be copied into the destination.
-
setSrcWidth
public void setSrcWidth(int srcWidth) Sets the value of thesrcWidthfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
srcWidth- the width of the source region being decoded, irrespective of how it will be copied into the destination.
-
setSrcHeight
public void setSrcHeight(int srcHeight) Sets the value of thesrcHeightfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
srcHeight- the height of the source region being decoded, irrespective of how it will be copied into the destination.
-
setSourceXOffset
public void setSourceXOffset(int sourceXOffset) Sets the value of thesourceXOffsetfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
sourceXOffset- the horizontal source offset to be used when mapping between source and destination coordinates.
-
setDstXOffset
public void setDstXOffset(int dstXOffset) Sets the value of thedstXOffsetfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
dstXOffset- the horizontal destination offset to be used when mapping between source and destination coordinates.
-
setSourceYOffset
public void setSourceYOffset(int sourceYOffset) Sets the value of thesourceYOffset.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
sourceYOffset- the vertical source offset to be used when mapping between source and destination coordinates.
-
setDstYOffset
public void setDstYOffset(int dstYOffset) Sets the value of thedstYOffsetfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
dstYOffset- the vertical destination offset to be used when mapping between source and destination coordinates.
-
setSubsampleX
public void setSubsampleX(int subsampleX) Sets the value of thesubsampleXfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
subsampleX- the horizontal subsampling factor.- Throws:
IllegalArgumentException- ifsubsampleXis less than or equal to 0.
-
setSubsampleY
public void setSubsampleY(int subsampleY) Sets the value of thesubsampleYfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
subsampleY- the vertical subsampling factor.- Throws:
IllegalArgumentException- ifsubsampleYis less than or equal to 0.
-
setSourceBands
public void setSourceBands(int[] sourceBands) Sets the value of thesourceBandsfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
sourceBands- an array ofints specifying the source bands to be read.
-
setDestinationBands
public void setDestinationBands(int[] destinationBands) Sets the value of thedestinationBandsfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
destinationBands- an array ofints specifying the destination bands to be written.
-
setImage
Sets the value of theimagefield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
image- the destinationBufferedImage.
-
setDstMinX
public void setDstMinX(int dstMinX) Sets the value of thedstMinXfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
dstMinX- the minimum X coordinate of the destination region.
-
setDstMinY
public void setDstMinY(int dstMinY) Sets the value of thedstMinYfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
dstMinY- the minimum Y coordinate of the destination region.
-
setDstWidth
public void setDstWidth(int dstWidth) Sets the value of thedstWidthfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
dstWidth- the width of the destination region.
-
setDstHeight
public void setDstHeight(int dstHeight) Sets the value of thedstHeightfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
dstHeight- the height of the destination region.
-
setActiveSrcMinX
public void setActiveSrcMinX(int activeSrcMinX) Sets the value of theactiveSrcMinXfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
activeSrcMinX- the minimum X coordinate of the active source region.
-
setActiveSrcMinY
public void setActiveSrcMinY(int activeSrcMinY) Sets the value of theactiveSrcMinYfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
activeSrcMinY- the minimum Y coordinate of the active source region.
-
setActiveSrcWidth
public void setActiveSrcWidth(int activeSrcWidth) Sets the value of theactiveSrcWidthfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
activeSrcWidth- the width of the active source region.
-
setActiveSrcHeight
public void setActiveSrcHeight(int activeSrcHeight) Sets the value of theactiveSrcHeightfield.If this method is called, the
beginDecodingmethod must be called prior to calling any of the decode methods.- Parameters:
activeSrcHeight- the height of the active source region.
-
setColorConverter
Sets theTIFFColorConverterobject describing the color space of the encoded data in the input stream. If noTIFFColorConverteris set, no conversion will be performed.- Parameters:
colorConverter- aTIFFColorConverterobject, ornull.
-
getRawImageType
Returns anImageTypeSpecifierdescribing an image whose underlying data array has the same format as the raw source pixel data.- Returns:
- an
ImageTypeSpecifier.
-
createRawImage
Creates aBufferedImagewhose underlying data array will be suitable for holding the raw decoded output of thedecodeRawmethod.The default implementation calls
getRawImageType, and calls the resultingImageTypeSpecifier'screateBufferedImagemethod.- Returns:
- a
BufferedImagewhose underlying data array has the same format as the raw source pixel data, ornullif it is not possible to create such an image.
-
decodeRaw
public abstract void decodeRaw(byte[] b, int dstOffset, int bitsPerPixel, int scanlineStride) throws IOException Decodes the source data into the providedbytearrayb, starting at the offset given bydstOffset. Each pixel occupiesbitsPerPixelbits, with no padding between pixels. Scanlines are separated byscanlineStridebytes.- Parameters:
b- abytearray to be written.dstOffset- the starting offset inbto be written.bitsPerPixel- the number of bits for each pixel.scanlineStride- the number ofbytes to advance between that starting pixels of each scanline.- Throws:
IOException- if an error occurs reading from the sourceImageInputStream.
-
decodeRaw
public void decodeRaw(short[] s, int dstOffset, int bitsPerPixel, int scanlineStride) throws IOException Decodes the source data into the providedshortarrays, starting at the offset given bydstOffset. Each pixel occupiesbitsPerPixelbits, with no padding between pixels. Scanlines are separated byscanlineStrideshortsThe default implementation calls
decodeRaw(byte[] b, ...)and copies the resulting data intos.- Parameters:
s- ashortarray to be written.dstOffset- the starting offset insto be written.bitsPerPixel- the number of bits for each pixel.scanlineStride- the number ofshorts to advance between that starting pixels of each scanline.- Throws:
IOException- if an error occurs reading from the sourceImageInputStream.
-
decodeRaw
public void decodeRaw(int[] i, int dstOffset, int bitsPerPixel, int scanlineStride) throws IOException Decodes the source data into the providedintarrayi, starting at the offset given bydstOffset. Each pixel occupiesbitsPerPixelbits, with no padding between pixels. Scanlines are separated byscanlineStrideints.The default implementation calls
decodeRaw(byte[] b, ...)and copies the resulting data intoi.- Parameters:
i- anintarray to be written.dstOffset- the starting offset inito be written.bitsPerPixel- the number of bits for each pixel.scanlineStride- the number ofints to advance between that starting pixels of each scanline.- Throws:
IOException- if an error occurs reading from the sourceImageInputStream.
-
decodeRaw
public void decodeRaw(float[] f, int dstOffset, int bitsPerPixel, int scanlineStride) throws IOException Decodes the source data into the providedfloatarrayf, starting at the offset given bydstOffset. Each pixel occupiesbitsPerPixelbits, with no padding between pixels. Scanlines are separated byscanlineStridefloats.The default implementation calls
decodeRaw(byte[] b, ...)and copies the resulting data intof.- Parameters:
f- afloatarray to be written.dstOffset- the starting offset infto be written.bitsPerPixel- the number of bits for each pixel.scanlineStride- the number offloats to advance between that starting pixels of each scanline.- Throws:
IOException- if an error occurs reading from the sourceImageInputStream.
-
beginDecoding
public void beginDecoding()This routine is called prior to a sequence of calls to thedecodemethod, in order to allow any necessary tables or other structures to be initialized based on metadata values. This routine is guaranteed to be called any time the metadata values have changed.The default implementation computes tables used by the
decodemethod to rescale components to different bit depths. Thus, if this method is overridden, it is important for the subclass method to callsuper(), unless it overridesdecodeas well. -
decode
Decodes the input bit stream (located in theImageInputStreamstream, at offsetoffset, and continuing forbyteCountbytes) into the outputBufferedImageimage.The default implementation analyzes the destination image to determine if it is suitable as the destination for the
decodeRawmethod. If not, a suitable image is created. Next,decodeRawis called to perform the actual decoding, and the results are copied into the destination image if necessary. Subsampling and offsetting are performed automatically.The precise responsibilities of this routine are as follows. The input bit stream is defined by the instance variables
stream,offset, andbyteCount. These bits contain the data for the region of the source image defined bysrcMinX,srcMinY,srcWidth, andsrcHeight.The source data is required to be subsampling, starting at the
sourceXOffsetth column and including everysubsampleXth pixel thereafter (and similarly forsourceYOffsetandsubsampleY).Pixels are copied into the destination with an addition shift of (
dstXOffset,dstYOffset). The complete set of formulas relating the source and destination coordinate spaces are:dx = (sx - sourceXOffset)/subsampleX + dstXOffset; dy = (sy - sourceYOffset)/subsampleY + dstYOffset;
Only source pixels such that(sx - sourceXOffset) % subsampleX == 0and(sy - sourceYOffset) % subsampleY == 0are copied.The inverse mapping, from destination to source coordinates, is one-to-one:
sx = (dx - dstXOffset)*subsampleX + sourceXOffset; sy = (dy - dstYOffset)*subsampleY + sourceYOffset;
The region of the destination image to be updated is given by the instance variables
dstMinX,dstMinY,dstWidth, anddstHeight.It is possible that not all of the source data being read will contribute to the destination image. For example, the destination offsets could be set such that some of the source pixels land outside of the bounds of the image. As a convenience, the bounds of the active source region (that is, the region of the strip or tile being read that actually contributes to the destination image, taking clipping into account) are available as
activeSrcMinX,activeSrcMinY,activeSrcWidthandactiveSrcHeight. Thus, the source pixel at (activeSrcMinX,activeSrcMinY) will map to the destination pixel (dstMinX,dstMinY).The sequence of source bands given by
sourceBandsare to be copied into the sequence of bands in the destination given bydestinationBands.Some standard tag information is provided the instance variables
photometricInterpretation,compression,samplesPerPixel,bitsPerSample,sampleFormat,extraSamples, andcolorMap.In practice, unless there is a significant performance advantage to be gained by overriding this routine, most users will prefer to use the default implementation of this routine, and instead override the
decodeRawand/orgetRawImageTypemethods.- Throws:
IOException- if an error occurs indecodeRaw.
-