Class GIFImageWriter

  • All Implemented Interfaces:
    javax.imageio.ImageTranscoder

    public class GIFImageWriter
    extends javax.imageio.ImageWriter
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private static boolean DEBUG  
      (package private) static java.lang.String IMAGE_METADATA_NAME  
      private int imageIndex
      The index of the image being written.
      private boolean isWritingSequence
      Whether a sequence is being written.
      (package private) static java.lang.String STANDARD_METADATA_NAME  
      private javax.imageio.stream.ImageOutputStream stream
      The output case to an ImageOutputStream.
      (package private) static java.lang.String STREAM_METADATA_NAME  
      private GIFWritableStreamMetadata theStreamMetadata
      The stream metadata of a sequence.
      private boolean wroteSequenceHeader
      Whether the header has been written.
      • Fields inherited from class javax.imageio.ImageWriter

        availableLocales, locale, originatingProvider, output, progressListeners, warningListeners, warningLocales
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean canWriteSequence()  
      private static void computeRegions​(java.awt.Rectangle sourceBounds, java.awt.Dimension destSize, javax.imageio.ImageWriteParam p)
      Compute the source region and destination dimensions taking any parameter settings into account.
      javax.imageio.metadata.IIOMetadata convertImageMetadata​(javax.imageio.metadata.IIOMetadata inData, javax.imageio.ImageTypeSpecifier imageType, javax.imageio.ImageWriteParam param)
      Creates a default image metadata object and merges in the supplied metadata.
      private void convertMetadata​(java.lang.String metadataFormatName, javax.imageio.metadata.IIOMetadata inData, javax.imageio.metadata.IIOMetadata outData)
      Merges inData into outData.
      javax.imageio.metadata.IIOMetadata convertStreamMetadata​(javax.imageio.metadata.IIOMetadata inData, javax.imageio.ImageWriteParam param)
      Creates a default stream metadata object and merges in the supplied metadata.
      private static byte[] createColorTable​(java.awt.image.ColorModel colorModel, java.awt.image.SampleModel sampleModel)
      Create a color table from the image ColorModel and SampleModel.
      void endWriteSequence()  
      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 static int getGifPaletteSize​(int x)
      According do GIF specification size of clor table (palette here) must be in range from 2 to 256 and must be power of 2.
      private static int getNumBits​(int value)
      The number of bits represented by the value which should be a legal length for a color table.
      private boolean needToCreateIndex​(java.awt.image.RenderedImage image)  
      void prepareWriteSequence​(javax.imageio.metadata.IIOMetadata streamMetadata)  
      void reset()  
      private void resetLocal()
      Resets locally defined instance variables.
      void setOutput​(java.lang.Object output)  
      private void write​(boolean writeHeader, boolean writeTrailer, javax.imageio.metadata.IIOMetadata sm, javax.imageio.IIOImage iioimage, javax.imageio.ImageWriteParam p)
      Writes any extension blocks, the Image Descriptor, the image data, and optionally the header (Signature and Logical Screen Descriptor) and trailer (Block Terminator).
      void write​(javax.imageio.metadata.IIOMetadata sm, javax.imageio.IIOImage iioimage, javax.imageio.ImageWriteParam p)  
      private void writeApplicationExtension​(GIFWritableImageMetadata im)  
      private void writeBlocks​(byte[] data)  
      private void writeCommentExtension​(GIFWritableImageMetadata im)  
      private void writeGraphicControlExtension​(int disposalMethod, boolean userInputFlag, boolean transparentColorFlag, int delayTime, int transparentColorIndex)  
      private void writeGraphicControlExtension​(GIFWritableImageMetadata im)  
      private void writeHeader​(java.lang.String version, int logicalScreenWidth, int logicalScreenHeight, int colorResolution, int pixelAspectRatio, int backgroundColorIndex, boolean sortFlag, int bitsPerPixel, byte[] globalColorTable)  
      private void writeHeader​(javax.imageio.metadata.IIOMetadata streamMetadata, int bitsPerPixel)  
      private void writeImage​(java.awt.image.RenderedImage image, GIFWritableImageMetadata imageMetadata, javax.imageio.ImageWriteParam param, byte[] globalColorTable, java.awt.Rectangle sourceBounds, java.awt.Dimension destSize)
      Writes any extension blocks, the Image Descriptor, and the image data
      private void writeImageDescriptor​(int imageLeftPosition, int imageTopPosition, int imageWidth, int imageHeight, boolean interlaceFlag, boolean sortFlag, int bitsPerPixel, byte[] localColorTable)  
      private void writeImageDescriptor​(GIFWritableImageMetadata imageMetadata, int bitsPerPixel)  
      private void writePlainTextExtension​(GIFWritableImageMetadata im)  
      private void writeRasterData​(java.awt.image.RenderedImage image, java.awt.Rectangle sourceBounds, java.awt.Dimension destSize, javax.imageio.ImageWriteParam param, boolean interlaceFlag)  
      private void writeRows​(java.awt.image.RenderedImage image, LZWCompressor compressor, int sx, int sdx, int sy, int sdy, int sw, int dy, int ddy, int dw, int dh, int numRowsWritten, int progressReportRowPeriod)  
      private void writeRowsOpt​(byte[] data, int offset, int lineStride, LZWCompressor compressor, int dy, int ddy, int dw, int dh, int numRowsWritten, int progressReportRowPeriod)  
      void writeToSequence​(javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param)  
      private void writeTrailer()  
      • Methods inherited from class javax.imageio.ImageWriter

        abort, abortRequested, addIIOWriteProgressListener, addIIOWriteWarningListener, canInsertEmpty, canInsertImage, canRemoveImage, canReplaceImageMetadata, canReplacePixels, canReplaceStreamMetadata, canWriteEmpty, canWriteRasters, clearAbortRequest, dispose, endInsertEmpty, endReplacePixels, endWriteEmpty, getAvailableLocales, getLocale, getNumThumbnailsSupported, getOriginatingProvider, getOutput, getPreferredThumbnailSizes, prepareInsertEmpty, prepareReplacePixels, prepareWriteEmpty, processImageComplete, processImageProgress, processImageStarted, processThumbnailComplete, processThumbnailProgress, processThumbnailStarted, processWarningOccurred, processWarningOccurred, processWriteAborted, removeAllIIOWriteProgressListeners, removeAllIIOWriteWarningListeners, removeIIOWriteProgressListener, removeIIOWriteWarningListener, removeImage, replaceImageMetadata, replacePixels, replacePixels, replaceStreamMetadata, setLocale, write, write, writeInsert
      • Methods inherited from class java.lang.Object

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

      • STANDARD_METADATA_NAME

        static final java.lang.String STANDARD_METADATA_NAME
        See Also:
        Constant Field Values
      • STREAM_METADATA_NAME

        static final java.lang.String STREAM_METADATA_NAME
        See Also:
        Constant Field Values
      • stream

        private javax.imageio.stream.ImageOutputStream stream
        The output case to an ImageOutputStream.
      • isWritingSequence

        private boolean isWritingSequence
        Whether a sequence is being written.
      • wroteSequenceHeader

        private boolean wroteSequenceHeader
        Whether the header has been written.
      • imageIndex

        private int imageIndex
        The index of the image being written.
    • Constructor Detail

    • Method Detail

      • getNumBits

        private static int getNumBits​(int value)
                               throws java.io.IOException
        The number of bits represented by the value which should be a legal length for a color table.
        Throws:
        java.io.IOException
      • computeRegions

        private static void computeRegions​(java.awt.Rectangle sourceBounds,
                                           java.awt.Dimension destSize,
                                           javax.imageio.ImageWriteParam p)
        Compute the source region and destination dimensions taking any parameter settings into account.
      • createColorTable

        private static byte[] createColorTable​(java.awt.image.ColorModel colorModel,
                                               java.awt.image.SampleModel sampleModel)
        Create a color table from the image ColorModel and SampleModel.
      • getGifPaletteSize

        private static int getGifPaletteSize​(int x)
        According do GIF specification size of clor table (palette here) must be in range from 2 to 256 and must be power of 2.
      • canWriteSequence

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

        private void convertMetadata​(java.lang.String metadataFormatName,
                                     javax.imageio.metadata.IIOMetadata inData,
                                     javax.imageio.metadata.IIOMetadata outData)
        Merges inData into outData. The supplied metadata format name is attempted first and failing that the standard metadata format name is attempted.
      • convertStreamMetadata

        public javax.imageio.metadata.IIOMetadata convertStreamMetadata​(javax.imageio.metadata.IIOMetadata inData,
                                                                        javax.imageio.ImageWriteParam param)
        Creates a default stream metadata object and merges in the supplied metadata.
        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)
        Creates a default image metadata object and merges in the supplied metadata.
        Specified by:
        convertImageMetadata in interface javax.imageio.ImageTranscoder
        Specified by:
        convertImageMetadata in class javax.imageio.ImageWriter
      • endWriteSequence

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

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

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

        public javax.imageio.ImageWriteParam getDefaultWriteParam()
        Overrides:
        getDefaultWriteParam 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
      • reset

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

        private void resetLocal()
        Resets locally defined instance variables.
      • setOutput

        public void setOutput​(java.lang.Object output)
        Overrides:
        setOutput in class javax.imageio.ImageWriter
      • 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
      • 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
      • needToCreateIndex

        private boolean needToCreateIndex​(java.awt.image.RenderedImage image)
      • write

        private void write​(boolean writeHeader,
                           boolean writeTrailer,
                           javax.imageio.metadata.IIOMetadata sm,
                           javax.imageio.IIOImage iioimage,
                           javax.imageio.ImageWriteParam p)
                    throws java.io.IOException
        Writes any extension blocks, the Image Descriptor, the image data, and optionally the header (Signature and Logical Screen Descriptor) and trailer (Block Terminator).
        Parameters:
        writeHeader - Whether to write the header.
        writeTrailer - Whether to write the trailer.
        sm - The stream metadata or null if writeHeader is false.
        iioimage - The image and image metadata.
        p - The write parameters.
        Throws:
        java.lang.IllegalArgumentException - if the number of bands is not 1.
        java.lang.IllegalArgumentException - if the number of bits per sample is greater than 8.
        java.lang.IllegalArgumentException - if the color component size is greater than 8.
        java.lang.IllegalArgumentException - if writeHeader is true and sm is null.
        java.lang.IllegalArgumentException - if writeHeader is false and a sequence is not being written.
        java.io.IOException
      • writeImage

        private void writeImage​(java.awt.image.RenderedImage image,
                                GIFWritableImageMetadata imageMetadata,
                                javax.imageio.ImageWriteParam param,
                                byte[] globalColorTable,
                                java.awt.Rectangle sourceBounds,
                                java.awt.Dimension destSize)
                         throws java.io.IOException
        Writes any extension blocks, the Image Descriptor, and the image data
        Parameters:
        image - The image.
        imageMetadata - The Image metadata.
        param - The write parameters.
        globalColorTable - The Global Color Table.
        sourceBounds - The source region.
        destSize - The destination dimensions.
        Throws:
        java.io.IOException
      • writeRows

        private void writeRows​(java.awt.image.RenderedImage image,
                               LZWCompressor compressor,
                               int sx,
                               int sdx,
                               int sy,
                               int sdy,
                               int sw,
                               int dy,
                               int ddy,
                               int dw,
                               int dh,
                               int numRowsWritten,
                               int progressReportRowPeriod)
                        throws java.io.IOException
        Throws:
        java.io.IOException
      • writeRowsOpt

        private void writeRowsOpt​(byte[] data,
                                  int offset,
                                  int lineStride,
                                  LZWCompressor compressor,
                                  int dy,
                                  int ddy,
                                  int dw,
                                  int dh,
                                  int numRowsWritten,
                                  int progressReportRowPeriod)
                           throws java.io.IOException
        Throws:
        java.io.IOException
      • writeRasterData

        private void writeRasterData​(java.awt.image.RenderedImage image,
                                     java.awt.Rectangle sourceBounds,
                                     java.awt.Dimension destSize,
                                     javax.imageio.ImageWriteParam param,
                                     boolean interlaceFlag)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • writeHeader

        private void writeHeader​(java.lang.String version,
                                 int logicalScreenWidth,
                                 int logicalScreenHeight,
                                 int colorResolution,
                                 int pixelAspectRatio,
                                 int backgroundColorIndex,
                                 boolean sortFlag,
                                 int bitsPerPixel,
                                 byte[] globalColorTable)
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • writeHeader

        private void writeHeader​(javax.imageio.metadata.IIOMetadata streamMetadata,
                                 int bitsPerPixel)
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • writeGraphicControlExtension

        private void writeGraphicControlExtension​(int disposalMethod,
                                                  boolean userInputFlag,
                                                  boolean transparentColorFlag,
                                                  int delayTime,
                                                  int transparentColorIndex)
                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • writeGraphicControlExtension

        private void writeGraphicControlExtension​(GIFWritableImageMetadata im)
                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • writeBlocks

        private void writeBlocks​(byte[] data)
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • writePlainTextExtension

        private void writePlainTextExtension​(GIFWritableImageMetadata im)
                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • writeApplicationExtension

        private void writeApplicationExtension​(GIFWritableImageMetadata im)
                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • writeCommentExtension

        private void writeCommentExtension​(GIFWritableImageMetadata im)
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • writeImageDescriptor

        private void writeImageDescriptor​(int imageLeftPosition,
                                          int imageTopPosition,
                                          int imageWidth,
                                          int imageHeight,
                                          boolean interlaceFlag,
                                          boolean sortFlag,
                                          int bitsPerPixel,
                                          byte[] localColorTable)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • writeImageDescriptor

        private void writeImageDescriptor​(GIFWritableImageMetadata imageMetadata,
                                          int bitsPerPixel)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • writeTrailer

        private void writeTrailer()
                           throws java.io.IOException
        Throws:
        java.io.IOException