Class TIFFImageWriter

  • All Implemented Interfaces:
    javax.imageio.ImageTranscoder

    public class TIFFImageWriter
    extends javax.imageio.ImageWriter
    • Constructor Summary

      Constructors 
      Constructor Description
      TIFFImageWriter​(javax.imageio.spi.ImageWriterSpi originatingProvider)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean canInsertEmpty​(int imageIndex)  
      boolean canInsertImage​(int imageIndex)  
      boolean canReplacePixels​(int imageIndex)  
      boolean canWriteEmpty()  
      boolean canWriteSequence()  
      private void checkParamsEmpty​(javax.imageio.ImageTypeSpecifier imageType, int width, int height, java.util.List thumbnails)  
      javax.imageio.metadata.IIOMetadata convertImageMetadata​(javax.imageio.metadata.IIOMetadata inData, javax.imageio.ImageTypeSpecifier imageType, javax.imageio.ImageWriteParam param)  
      private TIFFImageMetadata convertNativeImageMetadata​(javax.imageio.metadata.IIOMetadata inData)
      Converts a native com_sun_media_imageio_plugins_tiff_image_1.0 tree to a TIFFImageMetadata object.
      private TIFFImageMetadata convertStandardImageMetadata​(javax.imageio.metadata.IIOMetadata inData)
      Converts a standard javax_imageio_1.0 tree to a TIFFImageMetadata object.
      javax.imageio.metadata.IIOMetadata convertStreamMetadata​(javax.imageio.metadata.IIOMetadata inData, javax.imageio.ImageWriteParam param)  
      void dispose()  
      void endInsertEmpty()  
      void endReplacePixels()  
      void endWriteEmpty()  
      void endWriteSequence()  
      private boolean equals​(int[] s0, int[] s1)  
      javax.imageio.metadata.IIOMetadata getDefaultImageMetadata​(javax.imageio.ImageTypeSpecifier imageType, javax.imageio.ImageWriteParam param)  
      javax.imageio.metadata.IIOMetadata getDefaultStreamMetadata​(javax.imageio.ImageWriteParam param)  
      javax.imageio.ImageWriteParam getDefaultWriteParam()  
      private void initializeScaleTables​(int[] sampleSize)  
      private void insert​(int imageIndex, javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param, boolean writeData)  
      private boolean isEncodingEmpty()  
      private void locateIFD​(int imageIndex, long[] ifdpos, long[] ifd)  
      void prepareInsertEmpty​(int imageIndex, javax.imageio.ImageTypeSpecifier imageType, int width, int height, javax.imageio.metadata.IIOMetadata imageMetadata, java.util.List thumbnails, javax.imageio.ImageWriteParam param)  
      void prepareReplacePixels​(int imageIndex, java.awt.Rectangle region)  
      void prepareWriteEmpty​(javax.imageio.metadata.IIOMetadata streamMetadata, javax.imageio.ImageTypeSpecifier imageType, int width, int height, javax.imageio.metadata.IIOMetadata imageMetadata, java.util.List thumbnails, javax.imageio.ImageWriteParam param)  
      void prepareWriteSequence​(javax.imageio.metadata.IIOMetadata streamMetadata)  
      private TIFFIFD readIFD​(int imageIndex)  
      void replacePixels​(java.awt.image.Raster raster, javax.imageio.ImageWriteParam param)  
      void replacePixels​(java.awt.image.RenderedImage image, javax.imageio.ImageWriteParam param)  
      void reset()  
      void setOutput​(java.lang.Object output)  
      (package private) void setupMetadata​(java.awt.image.ColorModel cm, java.awt.image.SampleModel sm, int destWidth, int destHeight)
      Sets up the output metadata adding, removing, and overriding fields as needed.
      private java.awt.image.Raster subsample​(java.awt.image.Raster raster, int[] sourceBands, int subOriginX, int subOriginY, int subPeriodX, int subPeriodY, int dstOffsetX, int dstOffsetY, java.awt.Rectangle target)  
      void write​(javax.imageio.metadata.IIOMetadata sm, javax.imageio.IIOImage iioimage, javax.imageio.ImageWriteParam p)  
      private void write​(javax.imageio.metadata.IIOMetadata sm, javax.imageio.IIOImage iioimage, javax.imageio.ImageWriteParam p, boolean writeHeader, boolean writeData)  
      private void writeHeader()  
      void writeInsert​(int imageIndex, javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param)  
      private int writeTile​(java.awt.Rectangle tileRect, TIFFCompressor compressor)  
      void writeToSequence​(javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param)  
      static int XToTileX​(int x, int tileGridXOffset, int tileWidth)
      Converts a pixel's X coordinate into a horizontal tile index relative to a given tile grid layout specified by its X offset and tile width.
      static int YToTileY​(int y, int tileGridYOffset, int tileHeight)
      Converts a pixel's Y coordinate into a vertical tile index relative to a given tile grid layout specified by its Y offset and tile height.
      • Methods inherited from class javax.imageio.ImageWriter

        abort, abortRequested, addIIOWriteProgressListener, addIIOWriteWarningListener, canRemoveImage, canReplaceImageMetadata, canReplaceStreamMetadata, canWriteRasters, clearAbortRequest, getAvailableLocales, getLocale, getNumThumbnailsSupported, getOriginatingProvider, getOutput, getPreferredThumbnailSizes, processImageComplete, processImageProgress, processImageStarted, processThumbnailComplete, processThumbnailProgress, processThumbnailStarted, processWarningOccurred, processWarningOccurred, processWriteAborted, removeAllIIOWriteProgressListeners, removeAllIIOWriteWarningListeners, removeIIOWriteProgressListener, removeIIOWriteWarningListener, removeImage, replaceImageMetadata, replaceStreamMetadata, setLocale, write, write
      • Methods inherited from class java.lang.Object

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

      • EXIF_JPEG_COMPRESSION_TYPE

        static final java.lang.String EXIF_JPEG_COMPRESSION_TYPE
        See Also:
        Constant Field Values
      • DEFAULT_BYTES_PER_STRIP

        public static final int DEFAULT_BYTES_PER_STRIP
        See Also:
        Constant Field Values
      • TIFFCompressionTypes

        public static final java.lang.String[] TIFFCompressionTypes
        Supported TIFF compression types.
      • compressionTypes

        public static final java.lang.String[] compressionTypes
        Known TIFF compression types.
      • isCompressionLossless

        public static final boolean[] isCompressionLossless
        Lossless flag for known compression types.
      • compressionNumbers

        public static final int[] compressionNumbers
        Compression tag values for known compression types.
      • stream

        javax.imageio.stream.ImageOutputStream stream
      • headerPosition

        long headerPosition
      • image

        java.awt.image.RenderedImage image
      • imageType

        javax.imageio.ImageTypeSpecifier imageType
      • byteOrder

        java.nio.ByteOrder byteOrder
      • param

        javax.imageio.ImageWriteParam param
      • sourceXOffset

        int sourceXOffset
      • sourceYOffset

        int sourceYOffset
      • sourceWidth

        int sourceWidth
      • sourceHeight

        int sourceHeight
      • sourceBands

        int[] sourceBands
      • periodX

        int periodX
      • periodY

        int periodY
      • bitDepth

        int bitDepth
      • numBands

        int numBands
      • tileWidth

        int tileWidth
      • tileLength

        int tileLength
      • tilesAcross

        int tilesAcross
      • tilesDown

        int tilesDown
      • sampleSize

        int[] sampleSize
      • scalingBitDepth

        int scalingBitDepth
      • isRescaling

        boolean isRescaling
      • isBilevel

        boolean isBilevel
      • isImageSimple

        boolean isImageSimple
      • isInverted

        boolean isInverted
      • isTiled

        boolean isTiled
      • nativePhotometricInterpretation

        int nativePhotometricInterpretation
      • photometricInterpretation

        int photometricInterpretation
      • bitsPerSample

        char[] bitsPerSample
      • sampleFormat

        int sampleFormat
      • scale

        byte[][] scale
      • scale0

        byte[] scale0
      • scaleh

        byte[][] scaleh
      • scalel

        byte[][] scalel
      • compression

        int compression
      • predictor

        int predictor
      • totalPixels

        int totalPixels
      • pixelsDone

        int pixelsDone
      • nextIFDPointerPos

        long nextIFDPointerPos
      • nextSpace

        long nextSpace
      • isWritingSequence

        boolean isWritingSequence
      • isInsertingEmpty

        private boolean isInsertingEmpty
      • isWritingEmpty

        private boolean isWritingEmpty
      • replacePixelsLock

        private java.lang.Object replacePixelsLock
      • replacePixelsIndex

        private int replacePixelsIndex
      • replacePixelsTileOffsets

        private long[] replacePixelsTileOffsets
      • replacePixelsByteCounts

        private long[] replacePixelsByteCounts
      • replacePixelsOffsetsPosition

        private long replacePixelsOffsetsPosition
      • replacePixelsByteCountsPosition

        private long replacePixelsByteCountsPosition
      • replacePixelsRegion

        private java.awt.Rectangle replacePixelsRegion
      • inReplacePixelsNest

        private boolean inReplacePixelsNest
    • Constructor Detail

      • TIFFImageWriter

        public TIFFImageWriter​(javax.imageio.spi.ImageWriterSpi originatingProvider)
    • Method Detail

      • XToTileX

        public static int XToTileX​(int x,
                                   int tileGridXOffset,
                                   int tileWidth)
        Converts a pixel's X coordinate into a horizontal tile index relative to a given tile grid layout specified by its X offset and tile width.

        If tileWidth < 0, the results of this method are undefined. If tileWidth == 0, an ArithmeticException will be thrown.

        Throws:
        java.lang.ArithmeticException - If tileWidth == 0.
      • YToTileY

        public static int YToTileY​(int y,
                                   int tileGridYOffset,
                                   int tileHeight)
        Converts a pixel's Y coordinate into a vertical tile index relative to a given tile grid layout specified by its Y offset and tile height.

        If tileHeight < 0, the results of this method are undefined. If tileHeight == 0, an ArithmeticException will be thrown.

        Throws:
        java.lang.ArithmeticException - If tileHeight == 0.
      • getDefaultWriteParam

        public javax.imageio.ImageWriteParam getDefaultWriteParam()
        Overrides:
        getDefaultWriteParam in class javax.imageio.ImageWriter
      • setOutput

        public void setOutput​(java.lang.Object output)
        Overrides:
        setOutput in class javax.imageio.ImageWriter
      • getDefaultStreamMetadata

        public javax.imageio.metadata.IIOMetadata getDefaultStreamMetadata​(javax.imageio.ImageWriteParam param)
        Specified by:
        getDefaultStreamMetadata in class javax.imageio.ImageWriter
      • getDefaultImageMetadata

        public javax.imageio.metadata.IIOMetadata getDefaultImageMetadata​(javax.imageio.ImageTypeSpecifier imageType,
                                                                          javax.imageio.ImageWriteParam param)
        Specified by:
        getDefaultImageMetadata in class javax.imageio.ImageWriter
      • convertStreamMetadata

        public javax.imageio.metadata.IIOMetadata convertStreamMetadata​(javax.imageio.metadata.IIOMetadata inData,
                                                                        javax.imageio.ImageWriteParam param)
        Specified by:
        convertStreamMetadata in interface javax.imageio.ImageTranscoder
        Specified by:
        convertStreamMetadata in class javax.imageio.ImageWriter
      • convertImageMetadata

        public javax.imageio.metadata.IIOMetadata convertImageMetadata​(javax.imageio.metadata.IIOMetadata inData,
                                                                       javax.imageio.ImageTypeSpecifier imageType,
                                                                       javax.imageio.ImageWriteParam param)
        Specified by:
        convertImageMetadata in interface javax.imageio.ImageTranscoder
        Specified by:
        convertImageMetadata in class javax.imageio.ImageWriter
      • convertStandardImageMetadata

        private TIFFImageMetadata convertStandardImageMetadata​(javax.imageio.metadata.IIOMetadata inData)
                                                        throws javax.imageio.metadata.IIOInvalidTreeException
        Converts a standard javax_imageio_1.0 tree to a TIFFImageMetadata object.
        Parameters:
        inData - The metadata object.
        Returns:
        a TIFFImageMetadata or null if the standard tree derived from the input object is null.
        Throws:
        java.lang.IllegalArgumentException - if inData is null or does not support the standard metadata format.
        javax.imageio.metadata.IIOInvalidTreeException - if inData generates an invalid standard metadata tree.
      • convertNativeImageMetadata

        private TIFFImageMetadata convertNativeImageMetadata​(javax.imageio.metadata.IIOMetadata inData)
                                                      throws javax.imageio.metadata.IIOInvalidTreeException
        Converts a native com_sun_media_imageio_plugins_tiff_image_1.0 tree to a TIFFImageMetadata object.
        Parameters:
        inData - The metadata object.
        Returns:
        a TIFFImageMetadata or null if the native tree derived from the input object is null.
        Throws:
        java.lang.IllegalArgumentException - if inData is null or does not support the native metadata format.
        javax.imageio.metadata.IIOInvalidTreeException - if inData generates an invalid native metadata tree.
      • setupMetadata

        void setupMetadata​(java.awt.image.ColorModel cm,
                           java.awt.image.SampleModel sm,
                           int destWidth,
                           int destHeight)
                    throws javax.imageio.IIOException
        Sets up the output metadata adding, removing, and overriding fields as needed. The destination image dimensions are provided as parameters because these might differ from those of the source due to subsampling.
        Parameters:
        cm - The ColorModel of the image being written.
        sm - The SampleModel of the image being written.
        destWidth - The width of the written image after subsampling.
        destHeight - The height of the written image after subsampling.
        Throws:
        javax.imageio.IIOException
      • writeTile

        private int writeTile​(java.awt.Rectangle tileRect,
                              TIFFCompressor compressor)
                       throws java.io.IOException
        Parameters:
        tileRect - The area to be written which might be outside the image.
        Throws:
        java.io.IOException
      • equals

        private boolean equals​(int[] s0,
                               int[] s1)
      • initializeScaleTables

        private void initializeScaleTables​(int[] sampleSize)
      • write

        public void write​(javax.imageio.metadata.IIOMetadata sm,
                          javax.imageio.IIOImage iioimage,
                          javax.imageio.ImageWriteParam p)
                   throws java.io.IOException
        Specified by:
        write in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • writeHeader

        private void writeHeader()
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • write

        private void write​(javax.imageio.metadata.IIOMetadata sm,
                           javax.imageio.IIOImage iioimage,
                           javax.imageio.ImageWriteParam p,
                           boolean writeHeader,
                           boolean writeData)
                    throws java.io.IOException
        Throws:
        java.io.IOException
      • canWriteSequence

        public boolean canWriteSequence()
        Overrides:
        canWriteSequence in class javax.imageio.ImageWriter
      • prepareWriteSequence

        public void prepareWriteSequence​(javax.imageio.metadata.IIOMetadata streamMetadata)
                                  throws java.io.IOException
        Overrides:
        prepareWriteSequence in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • writeToSequence

        public void writeToSequence​(javax.imageio.IIOImage image,
                                    javax.imageio.ImageWriteParam param)
                             throws java.io.IOException
        Overrides:
        writeToSequence in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • endWriteSequence

        public void endWriteSequence()
                              throws java.io.IOException
        Overrides:
        endWriteSequence in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • canInsertImage

        public boolean canInsertImage​(int imageIndex)
                               throws java.io.IOException
        Overrides:
        canInsertImage in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • locateIFD

        private void locateIFD​(int imageIndex,
                               long[] ifdpos,
                               long[] ifd)
                        throws java.io.IOException
        Throws:
        java.io.IOException
      • writeInsert

        public void writeInsert​(int imageIndex,
                                javax.imageio.IIOImage image,
                                javax.imageio.ImageWriteParam param)
                         throws java.io.IOException
        Overrides:
        writeInsert in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • insert

        private void insert​(int imageIndex,
                            javax.imageio.IIOImage image,
                            javax.imageio.ImageWriteParam param,
                            boolean writeData)
                     throws java.io.IOException
        Throws:
        java.io.IOException
      • isEncodingEmpty

        private boolean isEncodingEmpty()
      • canInsertEmpty

        public boolean canInsertEmpty​(int imageIndex)
                               throws java.io.IOException
        Overrides:
        canInsertEmpty in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • canWriteEmpty

        public boolean canWriteEmpty()
                              throws java.io.IOException
        Overrides:
        canWriteEmpty in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • checkParamsEmpty

        private void checkParamsEmpty​(javax.imageio.ImageTypeSpecifier imageType,
                                      int width,
                                      int height,
                                      java.util.List thumbnails)
      • prepareInsertEmpty

        public void prepareInsertEmpty​(int imageIndex,
                                       javax.imageio.ImageTypeSpecifier imageType,
                                       int width,
                                       int height,
                                       javax.imageio.metadata.IIOMetadata imageMetadata,
                                       java.util.List thumbnails,
                                       javax.imageio.ImageWriteParam param)
                                throws java.io.IOException
        Overrides:
        prepareInsertEmpty in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • prepareWriteEmpty

        public void prepareWriteEmpty​(javax.imageio.metadata.IIOMetadata streamMetadata,
                                      javax.imageio.ImageTypeSpecifier imageType,
                                      int width,
                                      int height,
                                      javax.imageio.metadata.IIOMetadata imageMetadata,
                                      java.util.List thumbnails,
                                      javax.imageio.ImageWriteParam param)
                               throws java.io.IOException
        Overrides:
        prepareWriteEmpty in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • endInsertEmpty

        public void endInsertEmpty()
                            throws java.io.IOException
        Overrides:
        endInsertEmpty in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • endWriteEmpty

        public void endWriteEmpty()
                           throws java.io.IOException
        Overrides:
        endWriteEmpty in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • readIFD

        private TIFFIFD readIFD​(int imageIndex)
                         throws java.io.IOException
        Throws:
        java.io.IOException
      • canReplacePixels

        public boolean canReplacePixels​(int imageIndex)
                                 throws java.io.IOException
        Overrides:
        canReplacePixels in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • prepareReplacePixels

        public void prepareReplacePixels​(int imageIndex,
                                         java.awt.Rectangle region)
                                  throws java.io.IOException
        Overrides:
        prepareReplacePixels in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • subsample

        private java.awt.image.Raster subsample​(java.awt.image.Raster raster,
                                                int[] sourceBands,
                                                int subOriginX,
                                                int subOriginY,
                                                int subPeriodX,
                                                int subPeriodY,
                                                int dstOffsetX,
                                                int dstOffsetY,
                                                java.awt.Rectangle target)
      • replacePixels

        public void replacePixels​(java.awt.image.RenderedImage image,
                                  javax.imageio.ImageWriteParam param)
                           throws java.io.IOException
        Overrides:
        replacePixels in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • replacePixels

        public void replacePixels​(java.awt.image.Raster raster,
                                  javax.imageio.ImageWriteParam param)
                           throws java.io.IOException
        Overrides:
        replacePixels in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • endReplacePixels

        public void endReplacePixels()
                              throws java.io.IOException
        Overrides:
        endReplacePixels in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • reset

        public void reset()
        Overrides:
        reset in class javax.imageio.ImageWriter
      • dispose

        public void dispose()
        Overrides:
        dispose in class javax.imageio.ImageWriter