Class ImgWriterRAW

  • Direct Known Subclasses:
    ImgWriterRAWColor

    public class ImgWriterRAW
    extends jj2000.j2k.image.output.ImgWriter
    This class extends the ImgWriter abstract class for writing JP2 3D files. Each slice of the 3D image is written to the current offset in the ouput file. The class can take input data in ModelImage structure or BlkImgDataSrc (which is prefered in JJ2K context :-) Data: The image binary values appear one after the other (in raster order) immediately after the last header character ('\n') and are byte-aligned (they are packed into 1,2 or 4 bytes per sample, depending upon the bit-depth value).

    If the data is unsigned, level shifting is applied adding 2^(bit depth - 1)

    NOTE: This class is not thread safe, for reasons of internal buffering.

    See Also:
    ImgWriter, BlkImgDataSrc
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected int bitDepth
      The bit-depth of the input file (must be between 1 and 31)
      private byte[] buf
      The line buffer.
      protected int c
      The index of the component from where to get the data
      protected jj2000.j2k.image.DataBlkInt db
      A DataBlk, just used to avoid allocating a new one each time it is needed
      private int fb
      The number of fractional bits in the source data
      protected int imgType  
      (package private) boolean isSigned
      Whether the data must be signed when writing or not.
      (package private) int levShift
      Used with level-shifting
      (package private) int maxVal
      Used during saturation (2^bitdepth-1 if unsigned, 2^(bitdepth-1)-1 if signed)
      (package private) int minVal
      Used during saturation (0 if unsigned, -2^(bitdepth-1) if signed)
      protected ModelImage modImg
      Model image pointer
      protected int modImgOffset
      The current offset of the raw pixel data in the RAW file
      protected int nc
      The number of layers/components
      protected int offset
      The current offset of the raw pixel data in the RAW file
      private java.io.RandomAccessFile out
      Where to write the data
      protected int packBytes
      The pack length of one sample (in bytes, according to the output bit-depth
      • Fields inherited from class jj2000.j2k.image.output.ImgWriter

        DEF_STRIP_HEIGHT, h, src, w
    • Constructor Summary

      Constructors 
      Constructor Description
      ImgWriterRAW​(ModelImage mi, jj2000.j2k.image.BlkImgDataSrc imgSrc, boolean isSigned)  
      ImgWriterRAW​(java.io.File out, jj2000.j2k.image.BlkImgDataSrc imgSrc, int c, boolean isSigned)
      Creates a new writer to the specified File object, to write data from the specified component.
      ImgWriterRAW​(java.lang.String fname, jj2000.j2k.image.BlkImgDataSrc imgSrc, int c, boolean isSigned)
      Creates a new writer to the specified file, to write data from the specified component.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void close()
      Closes the underlying file or netwrok connection to where the data is written.
      void flush()
      Writes all buffered data to the file or resource.
      int getImgType()  
      int getOffset()  
      void setImgType​(int imgType)  
      void setOffset​(int slcIdx)  
      void setSrc​(jj2000.j2k.image.BlkImgDataSrc slc)  
      java.lang.String toString()
      Returns a string of information about the object, more than 1 line long.
      void write()
      Writes the source's current tile to the output.
      void write​(int ulx, int uly, int w, int h)
      Writes the data of the specified area to the file, coordinates are relative to the current tile of the source.
      void writeModImg()  
      void writeSlice()  
      • Methods inherited from class jj2000.j2k.image.output.ImgWriter

        finalize, writeAll
      • Methods inherited from class java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • maxVal

        int maxVal
        Used during saturation (2^bitdepth-1 if unsigned, 2^(bitdepth-1)-1 if signed)
      • minVal

        int minVal
        Used during saturation (0 if unsigned, -2^(bitdepth-1) if signed)
      • levShift

        int levShift
        Used with level-shifting
      • isSigned

        boolean isSigned
        Whether the data must be signed when writing or not. In the latter case inverse level shifting must be applied
      • bitDepth

        protected int bitDepth
        The bit-depth of the input file (must be between 1 and 31)
      • out

        private java.io.RandomAccessFile out
        Where to write the data
      • offset

        protected int offset
        The current offset of the raw pixel data in the RAW file
      • modImgOffset

        protected int modImgOffset
        The current offset of the raw pixel data in the RAW file
      • db

        protected jj2000.j2k.image.DataBlkInt db
        A DataBlk, just used to avoid allocating a new one each time it is needed
      • fb

        private int fb
        The number of fractional bits in the source data
      • c

        protected int c
        The index of the component from where to get the data
      • nc

        protected int nc
        The number of layers/components
      • packBytes

        protected int packBytes
        The pack length of one sample (in bytes, according to the output bit-depth
      • buf

        private byte[] buf
        The line buffer.
      • modImg

        protected ModelImage modImg
        Model image pointer
      • imgType

        protected int imgType
    • Constructor Detail

      • ImgWriterRAW

        public ImgWriterRAW​(java.io.File out,
                            jj2000.j2k.image.BlkImgDataSrc imgSrc,
                            int c,
                            boolean isSigned)
                     throws java.io.IOException
        Creates a new writer to the specified File object, to write data from the specified component.

        The size of the image that is written to the file is the size of the component from which to get the data, specified by b, not the size of the source image (they differ if there is some sub-sampling).

        All the header informations are given by the BlkImgDataSrc source (component width, component height, bit-depth) and sign flag, which are provided to the constructor. The endianness is always big-endian (MSB first).

        Parameters:
        out - The file where to write the data
        imgSrc - The source from where to get the image data to write.
        c - The index of the component from where to get the data.
        isSigned - Whether the datas are signed or not (needed only when writing header).
        Throws:
        java.io.IOException
        See Also:
        DataBlk
      • ImgWriterRAW

        public ImgWriterRAW​(ModelImage mi,
                            jj2000.j2k.image.BlkImgDataSrc imgSrc,
                            boolean isSigned)
                     throws java.io.IOException
        Throws:
        java.io.IOException
      • ImgWriterRAW

        public ImgWriterRAW​(java.lang.String fname,
                            jj2000.j2k.image.BlkImgDataSrc imgSrc,
                            int c,
                            boolean isSigned)
                     throws java.io.IOException
        Creates a new writer to the specified file, to write data from the specified component.

        The size of the image that is written to the file is the size of the component from which to get the data, specified by b, not the size of the source image (they differ if there is some sub-sampling).

        All header information is given by the BlkImgDataSrc source (component width, component height, bit-depth) and sign flag, which are provided to the constructor. The endianness is always big-endian (MSB first).

        Parameters:
        fname - The name of the file where to write the data
        imgSrc - The source from where to get the image data to write.
        c - The index of the component from where to get the data.
        isSigned - Whether the datas are signed or not (needed only when writing header).
        Throws:
        java.io.IOException
        See Also:
        DataBlk
    • Method Detail

      • close

        public void close()
                   throws java.io.IOException
        Closes the underlying file or netwrok connection to where the data is written. Any call to other methods of the class become illegal after a call to this one.
        Specified by:
        close in class jj2000.j2k.image.output.ImgWriter
        Throws:
        java.io.IOException - If an I/O error occurs.
      • flush

        public void flush()
                   throws java.io.IOException
        Writes all buffered data to the file or resource.
        Specified by:
        flush in class jj2000.j2k.image.output.ImgWriter
        Throws:
        java.io.IOException - If an I/O error occurs.
      • write

        public void write​(int ulx,
                          int uly,
                          int w,
                          int h)
                   throws java.io.IOException
        Writes the data of the specified area to the file, coordinates are relative to the current tile of the source. Before writing, the coefficients are limited to the nominal range and packed into 1,2 or 4 bytes (according to the bit-depth).

        If the data is unisigned, level shifting is applied adding 2^(bit depth - 1)

        This method may not be called concurrently from different threads.

        If the data returned from the BlkImgDataSrc source is progressive, then it is requested over and over until it is not progressive anymore.

        Specified by:
        write in class jj2000.j2k.image.output.ImgWriter
        Parameters:
        ulx - The horizontal coordinate of the upper-left corner of the area to write, relative to the current tile.
        uly - The vertical coordinate of the upper-left corner of the area to write, relative to the current tile.
        width - The width of the area to write.
        height - The height of the area to write.
        Throws:
        java.io.IOException - If an I/O error occurs.
      • write

        public void write()
                   throws java.io.IOException
        Writes the source's current tile to the output. The requests of data issued to the source BlkImgDataSrc object are done by strips, in order to reduce memory usage.

        If the data returned from the BlkImgDataSrc source is progressive, then it is requested over and over until it is not progressive anymore.

        Specified by:
        write in class jj2000.j2k.image.output.ImgWriter
        Throws:
        java.io.IOException - If an I/O error occurs.
        See Also:
        DataBlk
      • writeModImg

        public void writeModImg()
                         throws java.io.IOException
        Throws:
        java.io.IOException
      • toString

        public java.lang.String toString()
        Returns a string of information about the object, more than 1 line long. The information string includes information from the underlying RandomAccessFile (its toString() method is called in turn).
        Overrides:
        toString in class java.lang.Object
        Returns:
        A string of information about the object.
      • getOffset

        public int getOffset()
      • setOffset

        public void setOffset​(int slcIdx)
      • setSrc

        public void setSrc​(jj2000.j2k.image.BlkImgDataSrc slc)
      • writeSlice

        public void writeSlice()
                        throws java.io.IOException
        Throws:
        java.io.IOException
      • getImgType

        public int getImgType()
      • setImgType

        public void setImgType​(int imgType)