Package loci.formats.codec
Class LZWCodec
java.lang.Object
loci.formats.codec.BaseCodec
loci.formats.codec.LZWCodec
- All Implemented Interfaces:
loci.formats.codec.Codec
This is an optimized LZW codec for use with TIFF files.
Most of the code is inlined, and specifics of TIFF usage of LZW
(known size of decompressor output; possible lengths of LZW codes; specified
values for
CLEAR and END_OF_INFORMATION codes)
are taken in account.
Estimating the worst-case size of compressor output:
- The worst case means that there is no compression at all, and every input byte generates code to output.
- This means that the LZW table will be full (and reset) after reading each portion of 4096-256-2-1=3837 bytes of input (first 256 codes are preallocated, 2 codes are used for CLEAR and END_OF_IFORMATION, 1 code is lost due to original bug in TIFF library that now is a feature).
- Each full portion of 3837 byte will produce in output:
- 9 bits for CLEAR code;
- 9*253 + 10*512 + 11*1024 + 12*2048 = 43237 bits for character codes.
- Let n=3837, m=(number of bytes in the last incomplete portion),
N=(number of bytes in compressed complete portion with CLEAR code),
M=(number of bytes in compressed last incomplete portion).
We have inequalities:
- N <= 1.41 * n
- M <= 1.41 * m
- The last incomplete portion should also include CLEAR and END_OF_INFORMATION codes; they occupy less than 3 bytes.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbyte[]compress(byte[][] data, loci.formats.codec.CodecOptions options) 2D data block encoding default implementation.byte[]compress(byte[] data, loci.formats.codec.CodecOptions options) byte[]decompress(byte[] data) byte[]decompress(byte[][] data) byte[]decompress(byte[][] data, loci.formats.codec.CodecOptions options) 2D data block decoding default implementation.byte[]decompress(byte[] data, loci.formats.codec.CodecOptions options) byte[]protected static CodecOptions
-
Field Details
-
codec
-
-
Constructor Details
-
LZWCodec
public LZWCodec()
-
-
Method Details
-
compress
public byte[] compress(byte[] data, loci.formats.codec.CodecOptions options) throws loci.formats.FormatException - Throws:
loci.formats.FormatException
-
compress
public byte[] compress(byte[][] data, loci.formats.codec.CodecOptions options) throws loci.formats.FormatException Description copied from class:BaseCodec2D data block encoding default implementation. This method simply concatenates data[0] + data[1] + ... + data[i] into a 1D block of data, then calls the 1D version of compress.- Specified by:
compressin interfaceloci.formats.codec.Codec- Overrides:
compressin classBaseCodec- Parameters:
data- The data to be compressed.options- Options to be used during compression, if appropriate.- Returns:
- The compressed data.
- Throws:
loci.formats.FormatException- If input is not a compressed data block of the appropriate type.
-
decompress
public byte[] decompress(byte[] data, loci.formats.codec.CodecOptions options) throws loci.formats.FormatException - Specified by:
decompressin interfaceloci.formats.codec.Codec- Overrides:
decompressin classBaseCodec- Throws:
loci.formats.FormatException
-
decompress
public byte[] decompress(byte[][] data, loci.formats.codec.CodecOptions options) throws loci.formats.FormatException Description copied from class:BaseCodec2D data block decoding default implementation. This method simply concatenates data[0] + data[1] + ... + data[i] into a 1D block of data, then calls the 1D version of decompress.- Specified by:
decompressin interfaceloci.formats.codec.Codec- Overrides:
decompressin classBaseCodec- Parameters:
data- The data to be decompressed.- Returns:
- The decompressed data.
- Throws:
loci.formats.FormatException- If input is not a compressed data block of the appropriate type.
-
decompress
- Specified by:
decompressin interfaceloci.formats.codec.Codec- Overrides:
decompressin classBaseCodec- Throws:
loci.formats.FormatException
-
decompress
- Specified by:
decompressin interfaceloci.formats.codec.Codec- Overrides:
decompressin classBaseCodec- Throws:
loci.formats.FormatException
-
decompress
public byte[] decompress(RandomAccessInputStream in, loci.formats.codec.CodecOptions options) throws loci.formats.FormatException, IOException - Specified by:
decompressin interfaceloci.formats.codec.Codec- Specified by:
decompressin classBaseCodec- Throws:
loci.formats.FormatExceptionIOException
-
getOptions
protected static CodecOptions getOptions(loci.formats.codec.CodecOptions options) throws loci.formats.FormatException - Throws:
loci.formats.FormatException
-