Class TIFFDecompressor
- java.lang.Object
-
- com.github.jaiimageio.plugins.tiff.TIFFDecompressor
-
- Direct Known Subclasses:
TIFFDeflateDecompressor,TIFFFaxDecompressor,TIFFJPEGDecompressor,TIFFLSBDecompressor,TIFFLZWDecompressor,TIFFNullDecompressor,TIFFPackBitsDecompressor,TIFFYCbCrDecompressor
public abstract class TIFFDecompressor extends java.lang.ObjectA class defining a pluggable TIFF decompressor.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
decodemethod, 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
decodeRawmethod, which is responsible for decompressing the entire tile or strip into a byte array (or other appropriate datatype). The default implementation ofdecodewill perform all necessary setup of buffers, calldecodeRawto perform the actual decoding, perform subsampling, and copy the results into the final destination image. Where possible, it will pass the real image buffer todecodeRawin 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
Fields Modifier and Type Field Description protected intactiveSrcHeightThe height of the source region that will actually be copied into the destination image, taking into account all susbampling, offsetting, and clipping.protected intactiveSrcMinXThe 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 intactiveSrcMinYThe 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 intactiveSrcWidthThe width of the source region that will actually be copied into the destination image, taking into account all susbampling, offsetting, and clipping.(package private) booleanadjustBitDepths(package private) int[][]bitDepthScaleprotected int[]bitsPerSampleThe value of theBitsPerSampletag.private int[]bitsPerSampleCacheprotected intbyteCountThe number of bytes of data from the sourceImageInputStreamto be decompressed.protected TIFFColorConvertercolorConverterATIFFColorConverterobject describing the color space of the encoded pixel data, ornull.protected char[]colorMapThe value of theColorMaptag.protected intcompressionThe value of theCompressiontag.private static booleanDEBUGprivate int[]destBitsPerSampleCacheprotected int[]destinationBandsThe sequence of destination bands to receive the source data.private int[]destinationBandsCacheprotected intdstHeightThe height of the region of the destination image to be written.protected intdstMinXThe X coordinate of the upper left pixel to be written in the destination image.protected intdstMinYThe Y coordinate of the upper left pixel to be written in the destination image.protected intdstWidthThe width of the region of the destination image to be written.protected intdstXOffsetThe horizontal destination offset used, along withsourceXOffsetandsubsampleX, to map between horizontal source and destination pixel coordinates.protected intdstYOffsetThe vertical destination offset used, along withsourceYOffsetandsubsampleY, to map between horizontal source and destination pixel coordinates.protected int[]extraSamplesThe value of theExtraSamplestag.protected java.awt.image.BufferedImageimageThe final destination image.(package private) booleanisBilevel(package private) booleanisContiguousprivate booleanisFirstBitDepthTable(package private) booleanisImageSimpleprotected javax.imageio.metadata.IIOMetadatametadataTheIIOMetadataobject containing metadata for the current image.protected longoffsetThe offset in the sourceImageInputStreamof the start of the data to be decompressed.protected intphotometricInterpretationThe value of thePhotometricInterpretationtag.protected booleanplanartrueif the image is encoded using separate planes.private booleanplanarCacheprotected java.awt.image.BufferedImagerawImageABufferedImagefor thedecodeRawmethod to write into.protected javax.imageio.ImageReaderreaderTheImageReadercalling thisTIFFDecompressor.protected int[]sampleFormatThe value of theSampleFormattag.protected intsamplesPerPixelThe value of theSamplesPerPixeltag.protected int[]sourceBandsThe sequence of source bands that are to be copied into the destination.private int[]sourceBandsCacheprotected intsourceXOffsetThe source X offset used, along withdstXOffsetandsubsampleX, to map between horizontal source and destination pixel coordinates.protected intsourceYOffsetThe source Y offset used, along withdstYOffsetandsubsampleY, to map between vertical source and destination pixel coordinates.protected intsrcHeightThe height of the source region being decoded from the source stream.protected intsrcMinXThe X coordinate of the upper-left pixel of the source region being decoded from the source stream.protected intsrcMinYThe Y coordinate of the upper-left pixel of the source region being decoded from the source stream.protected intsrcWidthThe width of the source region being decoded from the source stream.protected javax.imageio.stream.ImageInputStreamstreamTheImageInputStreamcontaining the TIFF source data.protected intsubsampleXThe horizontal subsampling factor.protected intsubsampleYThe vertical subsampling factor.
-
Constructor Summary
Constructors Constructor Description TIFFDecompressor()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description private static booleanareIntArraysEqual(int[] a, int[] b)private static booleanareSampleSizesEqual(java.awt.image.SampleModel sm)Returns whether all samples have the same number of bits.voidbeginDecoding()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.(package private) static java.awt.image.ColorModelcreateComponentCM(java.awt.color.ColorSpace colorSpace, int numBands, int dataType, boolean hasAlpha, boolean isAlphaPremultiplied)Create aComponentColorModelfor use in creating anImageTypeSpecifier.(package private) static java.awt.image.SampleModelcreateInterleavedSM(int dataType, int numBands)Create aPixelInterleavedSampleModelfor use in creating anImageTypeSpecifier.private static intcreateMask(int[] bitsPerSample, int band)java.awt.image.BufferedImagecreateRawImage()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.private static intgetBitsPerPixel(java.awt.image.SampleModel sm)Returns the number of bits per pixel.private static intgetDataTypeFromNumBits(int numBits, boolean isSigned)private static intgetDataTypeSize(int dataType)Return the number of bits occupied bydataTypewhich must be one of theDataBufferTYPEs.javax.imageio.ImageTypeSpecifiergetRawImageType()Returns anImageTypeSpecifierdescribing an image whose underlying data array has the same format as the raw source pixel data.static javax.imageio.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.private static booleanisDataBufferBitContiguous(java.awt.image.SampleModel sm)Determines whether theDataBufferis filled without any interspersed padding bits.private static voidreformatData(byte[] buf, int bytesPerRow, int numRows, short[] shortData, int[] intData, int outOffset, int outStride)Reformats data read as bytes into a short or int buffer.private static voidreformatDiscontiguousData(byte[] buf, int stride, int w, int h, java.awt.image.WritableRaster raster)Reformats bit-discontiguous data into theDataBufferof the suppliedWritableRaster.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(java.awt.image.BufferedImage image)Sets the value of theimagefield.voidsetMetadata(javax.imageio.metadata.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(javax.imageio.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(javax.imageio.stream.ImageInputStream stream)Sets the value of thestreamfield.voidsetSubsampleX(int subsampleX)Sets the value of thesubsampleXfield.voidsetSubsampleY(int subsampleY)Sets the value of thesubsampleYfield.
-
-
-
Field Detail
-
DEBUG
private static final boolean DEBUG
- See Also:
- Constant Field Values
-
reader
protected javax.imageio.ImageReader reader
TheImageReadercalling thisTIFFDecompressor.
-
metadata
protected javax.imageio.metadata.IIOMetadata metadata
TheIIOMetadataobject containing metadata for the current image.
-
photometricInterpretation
protected int photometricInterpretation
The 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 compression
The 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 planar
trueif the image is encoded using separate planes.
-
samplesPerPixel
protected int samplesPerPixel
The value of theSamplesPerPixeltag.
-
bitsPerSample
protected int[] bitsPerSample
The value of theBitsPerSampletag.
-
sampleFormat
protected int[] sampleFormat
The 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[] extraSamples
The 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[] colorMap
The value of theColorMaptag.
-
stream
protected javax.imageio.stream.ImageInputStream stream
TheImageInputStreamcontaining the TIFF source data.
-
offset
protected long offset
The offset in the sourceImageInputStreamof the start of the data to be decompressed.
-
byteCount
protected int byteCount
The number of bytes of data from the sourceImageInputStreamto be decompressed.
-
srcMinX
protected int srcMinX
The 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 srcMinY
The 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 srcWidth
The width of the source region being decoded from the source stream. This value is not affected by source subsampling.
-
srcHeight
protected int srcHeight
The height of the source region being decoded from the source stream. This value is not affected by source subsampling.
-
sourceXOffset
protected int sourceXOffset
The source X offset used, along withdstXOffsetandsubsampleX, to map between horizontal source and destination pixel coordinates.
-
dstXOffset
protected int dstXOffset
The 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 sourceYOffset
The source Y offset used, along withdstYOffsetandsubsampleY, to map between vertical source and destination pixel coordinates.
-
dstYOffset
protected int dstYOffset
The 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 subsampleX
The 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 subsampleY
The 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[] sourceBands
The sequence of source bands that are to be copied into the destination.
-
destinationBands
protected int[] destinationBands
The sequence of destination bands to receive the source data.
-
rawImage
protected java.awt.image.BufferedImage rawImage
ABufferedImagefor thedecodeRawmethod to write into.
-
image
protected java.awt.image.BufferedImage image
The final destination image.
-
dstMinX
protected int dstMinX
The X coordinate of the upper left pixel to be written in the destination image.
-
dstMinY
protected int dstMinY
The Y coordinate of the upper left pixel to be written in the destination image.
-
dstWidth
protected int dstWidth
The width of the region of the destination image to be written.
-
dstHeight
protected int dstHeight
The height of the region of the destination image to be written.
-
activeSrcMinX
protected int activeSrcMinX
The 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 activeSrcMinY
The 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 activeSrcWidth
The 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 activeSrcHeight
The 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
protected TIFFColorConverter colorConverter
ATIFFColorConverterobject describing the color space of the encoded pixel data, ornull.
-
isBilevel
boolean isBilevel
-
isContiguous
boolean isContiguous
-
isImageSimple
boolean isImageSimple
-
adjustBitDepths
boolean adjustBitDepths
-
bitDepthScale
int[][] bitDepthScale
-
isFirstBitDepthTable
private boolean isFirstBitDepthTable
-
planarCache
private boolean planarCache
-
destBitsPerSampleCache
private int[] destBitsPerSampleCache
-
sourceBandsCache
private int[] sourceBandsCache
-
bitsPerSampleCache
private int[] bitsPerSampleCache
-
destinationBandsCache
private int[] destinationBandsCache
-
-
Method Detail
-
createInterleavedSM
static java.awt.image.SampleModel createInterleavedSM(int dataType, int numBands)Create aPixelInterleavedSampleModelfor use in creating anImageTypeSpecifier. Its dimensions will be 1x1 and it will have ascending band offsets as {0, 1, 2, ..., numBands}.- Parameters:
dataType- The data type (DataBuffer.TYPE_*).numBands- The number of bands.- Returns:
- A
PixelInterleavedSampleModel.
-
createComponentCM
static java.awt.image.ColorModel createComponentCM(java.awt.color.ColorSpace colorSpace, int numBands, int dataType, boolean hasAlpha, boolean isAlphaPremultiplied)Create aComponentColorModelfor use in creating anImageTypeSpecifier.
-
createMask
private static int createMask(int[] bitsPerSample, int band)
-
getDataTypeFromNumBits
private static int getDataTypeFromNumBits(int numBits, boolean isSigned)
-
areIntArraysEqual
private static boolean areIntArraysEqual(int[] a, int[] b)
-
getDataTypeSize
private static int getDataTypeSize(int dataType) throws javax.imageio.IIOExceptionReturn the number of bits occupied bydataTypewhich must be one of theDataBufferTYPEs.- Throws:
javax.imageio.IIOException
-
getBitsPerPixel
private static int getBitsPerPixel(java.awt.image.SampleModel sm)
Returns the number of bits per pixel.
-
areSampleSizesEqual
private static boolean areSampleSizesEqual(java.awt.image.SampleModel sm)
Returns whether all samples have the same number of bits.
-
isDataBufferBitContiguous
private static boolean isDataBufferBitContiguous(java.awt.image.SampleModel sm) throws javax.imageio.IIOExceptionDetermines whether theDataBufferis filled without any interspersed padding bits.- Throws:
javax.imageio.IIOException
-
reformatData
private static void reformatData(byte[] buf, int bytesPerRow, int numRows, short[] shortData, int[] intData, int outOffset, int outStride) throws javax.imageio.IIOExceptionReformats data read as bytes into a short or int buffer.- Throws:
javax.imageio.IIOException
-
reformatDiscontiguousData
private static void reformatDiscontiguousData(byte[] buf, int stride, int w, int h, java.awt.image.WritableRaster raster) throws java.io.IOExceptionReformats bit-discontiguous data into theDataBufferof the suppliedWritableRaster.- Throws:
java.io.IOException
-
getRawImageTypeSpecifier
public static javax.imageio.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
public void setReader(javax.imageio.ImageReader reader)
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
public void setMetadata(javax.imageio.metadata.IIOMetadata metadata)
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
public void setStream(javax.imageio.stream.ImageInputStream stream)
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:
java.lang.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:
java.lang.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
public void setImage(java.awt.image.BufferedImage image)
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
public void setColorConverter(TIFFColorConverter colorConverter)
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
public javax.imageio.ImageTypeSpecifier getRawImageType()
Returns anImageTypeSpecifierdescribing an image whose underlying data array has the same format as the raw source pixel data.- Returns:
- an
ImageTypeSpecifier.
-
createRawImage
public java.awt.image.BufferedImage 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 java.io.IOExceptionDecodes 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:
java.io.IOException- if an error occurs reading from the sourceImageInputStream.
-
decodeRaw
public void decodeRaw(short[] s, int dstOffset, int bitsPerPixel, int scanlineStride) throws java.io.IOExceptionDecodes 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:
java.io.IOException- if an error occurs reading from the sourceImageInputStream.
-
decodeRaw
public void decodeRaw(int[] i, int dstOffset, int bitsPerPixel, int scanlineStride) throws java.io.IOExceptionDecodes 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:
java.io.IOException- if an error occurs reading from the sourceImageInputStream.
-
decodeRaw
public void decodeRaw(float[] f, int dstOffset, int bitsPerPixel, int scanlineStride) throws java.io.IOExceptionDecodes 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:
java.io.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
public void decode() throws java.io.IOExceptionDecodes 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:
java.io.IOException- if an error occurs indecodeRaw.
-
-