Class HCompress
java.lang.Object
nom.tam.fits.compression.algorithm.hcompress.HCompress
The original compression code was written by Richard White at the STScI and
included (ported to c and adapted) in cfitsio by William Pence, NASA/GSFC.
That code was then ported to java by R. van Nieuwenhoven. Later it was
massively refactored to harmonize the different compression algorithms and
reduce the duplicate code pieces without obscuring the algorithm itself as
far as possible. The original site for the algorithm is
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate intvariables for bit output to buffer when Huffman codingprivate static final int[]protected static final intprotected static final intprivate intNumber of bits free in bufferprivate intprivate intBits buffered for outputprotected static final intprivate static final int[]private static final byte[]private static final intprivate static final intto be refactored to a good name.private static final int[]protected static final intprotected static final double -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate intb2i(boolean b) private intbufcopy(byte[] a, int n, byte[] buffer, int b, long bmax) protected voidcompress(long[] aa, int ny, int nx, int scale, ByteBuffer output) private LongBuffercopy(LongBuffer a, int i) private voiddigitize(LongBuffer a, int aOffset, int nx, int ny, long scale) private voiddoEncode(ByteBuffer compressedBytes, LongBuffer pixels, int nx, int ny, byte[] nbitplanes) encode pixels.private voiddoneOutputtingBits(ByteBuffer outfile) private intencode(ByteBuffer compressedBytes, LongBuffer a, int nx, int ny, int scale) private inthtrans(long[] a, int nx, int ny) private intlog2n(int nqmax) private voidoutputNbits(ByteBuffer outfile, int bits, int n) private voidoutputNnybble(ByteBuffer outfile, int n, byte[] array) private voidoutputNybble(ByteBuffer outfile, int bits) private intqtreeEncode(ByteBuffer outfile, LongBuffer a, int n, int nqx, int nqy, int nbitplanes) macros to write out 4-bit nybble, Huffman code for this valueprivate voidqtreeOnebit(LongBuffer a, int n, int nx, int ny, byte[] b, int bit) private voidqtreeReduce(byte[] a, int n, int nx, int ny, byte[] b) private voidshuffle(long[] a, int aOffset, int n, int n2, long[] tmp) private voidprivate voidwriteBdirect(ByteBuffer outfile, LongBuffer a, int n, int nqx, int nqy, byte[] scratch, int bit)
-
Field Details
-
HTRANS_START_MASK
private static final int HTRANS_START_MASK- See Also:
-
ROUNDING_HALF
protected static final double ROUNDING_HALF- See Also:
-
BITS_OF_1_BYTE
protected static final int BITS_OF_1_BYTE- See Also:
-
BITS_OF_1_NYBBLE
protected static final int BITS_OF_1_NYBBLE- See Also:
-
BYTE_MASK
protected static final int BYTE_MASK- See Also:
-
NYBBLE_MASK
protected static final int NYBBLE_MASK- See Also:
-
N3
private static final int N3to be refactored to a good name.- See Also:
-
BITS_MASK
private static final int[] BITS_MASK -
CODE
private static final int[] CODE -
CODE_MAGIC
private static final byte[] CODE_MAGIC -
NCODE
private static final int[] NCODE -
bitbuffer
private int bitbuffervariables for bit output to buffer when Huffman coding -
bitsToGo2
private int bitsToGo2Number of bits free in buffer -
bitsToGo3
private int bitsToGo3 -
buffer2
private int buffer2Bits buffered for output
-
-
Constructor Details
-
HCompress
public HCompress()
-
-
Method Details
-
b2i
private int b2i(boolean b) -
bufcopy
private int bufcopy(byte[] a, int n, byte[] buffer, int b, long bmax) -
compress
-
copy
-
digitize
-
doEncode
private void doEncode(ByteBuffer compressedBytes, LongBuffer pixels, int nx, int ny, byte[] nbitplanes) encode pixels.- Parameters:
compressedBytes- compressed datapixels- pixels to compressnx- image width dimensionny- image height dimensionnbitplanes- Number of bit planes in quadrants
-
doneOutputtingBits
-
encode
-
htrans
private int htrans(long[] a, int nx, int ny) -
log2n
private int log2n(int nqmax) -
outputNbits
-
outputNnybble
-
outputNybble
-
qtreeEncode
macros to write out 4-bit nybble, Huffman code for this value -
qtreeOnebit
-
qtreeReduce
private void qtreeReduce(byte[] a, int n, int nx, int ny, byte[] b) -
shuffle
private void shuffle(long[] a, int aOffset, int n, int n2, long[] tmp) -
startOutputtingBits
private void startOutputtingBits() -
writeBdirect
private void writeBdirect(ByteBuffer outfile, LongBuffer a, int n, int nqx, int nqy, byte[] scratch, int bit)
-