Class TIFFImageEncoder

  • All Implemented Interfaces:
    ImageEncoder

    public class TIFFImageEncoder
    extends ImageEncoderImpl
    A baseline TIFF writer. The writer outputs TIFF images in either Bilevel, Greyscale, Palette color or Full Color modes.
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private static class  TIFFImageEncoder.Context  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private static int compressPackBits​(byte[] data, int numRows, long bytesPerRow, byte[] compData)
      Performs PackBits compression on a tile of data.
      private static int deflate​(java.util.zip.Deflater deflater, byte[] inflated, byte[] deflated)  
      void encode​(java.awt.image.RenderedImage im)
      Encodes a RenderedImage and writes the output to the OutputStream associated with this ImageEncoder.
      private int encode​(java.awt.image.RenderedImage im, TIFFEncodeParam encodeParam, int ifdOffset, boolean isLast)  
      java.lang.Object encodeMultiple​(java.lang.Object context, java.awt.image.RenderedImage img)
      Encodes a RenderedImage as part of a multi-page file and writes the output to the OutputStream associated with this ImageEncoder.
      void finishMultiple​(java.lang.Object context)
      Signals the encoder that you've finished sending pages for a multi-page image files.
      private int getDirectorySize​(java.util.SortedSet fields)
      Calculates the size of the IFD.
      private static int getValueSize​(TIFFField field)
      Determine the number of bytes in the value portion of the field.
      private static int packBits​(byte[] input, int inOffset, int inCount, byte[] output, int outOffset)
      Performs PackBits compression for a single buffer of data.
      private void validateImage​(int dataTypeSize, int[] sampleSize, int numBands, int dataType, java.awt.image.ColorModel colorModel)  
      private void writeDirectory​(int thisIFDOffset, java.util.SortedSet fields, int nextIFDOffset)  
      private void writeFileHeader()  
      private void writeLong​(long l)
      despite its name, this method writes only 4 bytes to output.
      private void writeUnsignedShort​(int s)  
      private void writeValues​(TIFFField field)  
      private void writeValuesAsFourBytes​(TIFFField field)  
      • Methods inherited from class java.lang.Object

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

      • TIFF_YCBCR_SUBSAMPLING

        private static final int TIFF_YCBCR_SUBSAMPLING
        See Also:
        Constant Field Values
      • TIFF_YCBCR_POSITIONING

        private static final int TIFF_YCBCR_POSITIONING
        See Also:
        Constant Field Values
      • SIZE_OF_TYPE

        private static final int[] SIZE_OF_TYPE
    • Constructor Detail

      • TIFFImageEncoder

        public TIFFImageEncoder​(java.io.OutputStream output,
                                ImageEncodeParam param)
    • Method Detail

      • encode

        public void encode​(java.awt.image.RenderedImage im)
                    throws java.io.IOException
        Encodes a RenderedImage and writes the output to the OutputStream associated with this ImageEncoder.
        Specified by:
        encode in interface ImageEncoder
        Specified by:
        encode in class ImageEncoderImpl
        Throws:
        java.io.IOException
      • encodeMultiple

        public java.lang.Object encodeMultiple​(java.lang.Object context,
                                               java.awt.image.RenderedImage img)
                                        throws java.io.IOException
        Encodes a RenderedImage as part of a multi-page file and writes the output to the OutputStream associated with this ImageEncoder.

        When you sent all pages, make sure you call finishMultiple() in the end. Otherwise, the generated file will be corrupted.

        Parameters:
        context - the context object you receive as return value to a previous call to encodeMultiple(). Set null for the first image.
        img - the image
        Returns:
        a context object needed for writing multiple pages for a single image file
        Throws:
        java.io.IOException - In case of an I/O error
      • finishMultiple

        public void finishMultiple​(java.lang.Object context)
                            throws java.io.IOException
        Signals the encoder that you've finished sending pages for a multi-page image files.
        Parameters:
        context - the context object you receive as return value to a previous call to encodeMultiple()
        Throws:
        java.io.IOException - In case of an I/O error
      • encode

        private int encode​(java.awt.image.RenderedImage im,
                           TIFFEncodeParam encodeParam,
                           int ifdOffset,
                           boolean isLast)
                    throws java.io.IOException
        Throws:
        java.io.IOException
      • validateImage

        private void validateImage​(int dataTypeSize,
                                   int[] sampleSize,
                                   int numBands,
                                   int dataType,
                                   java.awt.image.ColorModel colorModel)
      • getDirectorySize

        private int getDirectorySize​(java.util.SortedSet fields)
        Calculates the size of the IFD.
      • writeFileHeader

        private void writeFileHeader()
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • writeDirectory

        private void writeDirectory​(int thisIFDOffset,
                                    java.util.SortedSet fields,
                                    int nextIFDOffset)
                             throws java.io.IOException
        Throws:
        java.io.IOException
      • getValueSize

        private static int getValueSize​(TIFFField field)
                                 throws java.io.UnsupportedEncodingException
        Determine the number of bytes in the value portion of the field.
        Throws:
        java.io.UnsupportedEncodingException
      • writeValuesAsFourBytes

        private void writeValuesAsFourBytes​(TIFFField field)
                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • writeValues

        private void writeValues​(TIFFField field)
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUnsignedShort

        private void writeUnsignedShort​(int s)
                                 throws java.io.IOException
        Throws:
        java.io.IOException
      • writeLong

        private void writeLong​(long l)
                        throws java.io.IOException
        despite its name, this method writes only 4 bytes to output.
        Parameters:
        l - 32bits of this are written as 4 bytes
        Throws:
        java.io.IOException
      • compressPackBits

        private static int compressPackBits​(byte[] data,
                                            int numRows,
                                            long bytesPerRow,
                                            byte[] compData)
        Performs PackBits compression on a tile of data.
      • packBits

        private static int packBits​(byte[] input,
                                    int inOffset,
                                    int inCount,
                                    byte[] output,
                                    int outOffset)
        Performs PackBits compression for a single buffer of data. This should be called for each row of each tile. The returned value is the offset into the output buffer after compression.
      • deflate

        private static int deflate​(java.util.zip.Deflater deflater,
                                   byte[] inflated,
                                   byte[] deflated)