Class RiceCompressor<T extends java.nio.Buffer>

  • All Implemented Interfaces:
    ICompressor<T>
    Direct Known Subclasses:
    RiceCompressor.ByteRiceCompressor, RiceCompressor.IntRiceCompressor, RiceCompressor.ShortRiceCompressor

    public abstract class RiceCompressor<T extends java.nio.Buffer>
    extends java.lang.Object
    implements ICompressor<T>
    The original compression was designed by Rice, Yeh, and Miller the code was written by Richard White at STSc 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.
    • Field Detail

      • UNSIGNED_BYTE_MASK

        private static final long UNSIGNED_BYTE_MASK
        mask to convert a "unsigned" byte to a long.
        See Also:
        Constant Field Values
      • UNSIGNED_SHORT_MASK

        private static final long UNSIGNED_SHORT_MASK
        mask to convert a "unsigned" short to a long.
        See Also:
        Constant Field Values
      • UNSIGNED_INTEGER_MASK

        private static final long UNSIGNED_INTEGER_MASK
        mask to convert a "unsigned" int to a long.
        See Also:
        Constant Field Values
      • LOG

        private static final java.util.logging.Logger LOG
        logger to log to.
      • NONZERO_COUNT

        private static final int[] NONZERO_COUNT
      • bBits

        private final int bBits
      • bitsPerPixel

        private final int bitsPerPixel
      • blockSize

        private final int blockSize
      • fsBits

        private final int fsBits
      • fsMax

        private final int fsMax
    • Method Detail

      • undoMappingAndDifferencing

        private long undoMappingAndDifferencing​(long lastpix,
                                                long diff)

        undo mapping and differencing Note that some of these operations will overflow the unsigned int arithmetic -- that's OK, it all works out to give the right answers in the output file.

        In java this is more complicated because of the missing unsigned integers. trying to simulate the behavior

        Parameters:
        lastpix - the current last pix value
        diff - the difference to "add"
        Returns:
        return the new lastpiy value
      • compress

        protected void compress​(int dataLength,
                                int firstPixel,
                                BitBuffer buffer)
        compress the integer tiledImageOperation on a rise compressed byte buffer.
        Parameters:
        dataLength - length of the data to compress
        firstPixel - the value of the first pixel
        buffer - the buffer to write to
      • decompressBuffer

        protected void decompressBuffer​(java.nio.ByteBuffer readBuffer,
                                        int nx)
        decompress the readbuffer and fill the pixelarray.
        Parameters:
        readBuffer - input buffer
        nx - the number of pixel to uncompress
      • nextPixel

        protected abstract int nextPixel()
      • nextPixel

        protected abstract void nextPixel​(int pixel)