Class AnimatedGifEncoder

java.lang.Object
  extended by AnimatedGifEncoder

public class AnimatedGifEncoder
extends java.lang.Object

Class AnimatedGifEncoder - Encodes a GIF file consisting of one or more frames.

 Example:
    AnimatedGifEncoder e = new AnimatedGifEncoder();
    e.start(outputFileName);
    e.setDelay(1000);     // 1 frame per sec
    e.addFrame(image1);
    e.addFrame(image2);
    e.finish();
 
No copyright asserted on the source code of this class. May be used for any purpose, however, refer to the Unisys LZW patent for restrictions on use of the associated LZWEncoder class. Please forward any corrections to kweiner@fmsware.com.


Field Summary
protected  boolean closeStream
          boolean that represents closing the stream when finished (False) and not closing the stream (True).
protected  int colorDepth
          int that represents the number of bit planes.
protected  byte[] colorTab
          byte array that represents the RGB palette.
protected  int delay
          int that represents the frame delay in hundredths.
protected  int dispose
          int that represents the disposal code (-1 = use default).
protected  boolean firstFrame
          boolean that represents animation is on the first frame(True) and not on the first frame (False).
protected  int height
          int that represents the height of the image size.
protected  java.awt.image.BufferedImage image
          BufferedImage object that represents the current frame.
protected  byte[] indexedPixels
          byte array to hold converted frame indexed to palette.
protected  java.io.OutputStream out
          OutputStream object for printing.
protected  int palSize
          int that represents the color table size (bits-1).
protected  byte[] pixels
          byte array to hold RGB values from frame.
protected  int repeat
          int that represents the number of times to repeat the animation, DEFALUT is -1 (no repeat).
protected  int sample
          int that represents the default sample interval for quantizer (10).
protected  boolean sizeSet
          boolean that represents getting size from first frame (False) do not get size from first frame (True).
protected  boolean started
          boolean that represents whether or not it is ready to output frames.
protected  int transIndex
          int that represents the transparent index in the color table.
protected  java.awt.Color transparent
          Color object that represents the transparent color.
protected  boolean[] usedEntry
          boolean array to represent active palette entries.
protected  int width
          int that represents the width of the image size.
 
Constructor Summary
AnimatedGifEncoder()
           
 
Method Summary
 boolean addFrame(java.awt.image.BufferedImage im)
          Adds next GIF frame.
protected  void analyzePixels()
          Analyzes image colors and creates color map.
protected  int findClosest(java.awt.Color c)
          Returns index of palette color closest to c.
 boolean finish()
          Flushes any pending data and closes output file.
protected  void getImagePixels()
          Extracts image pixels into byte array "pixels".
 void setDelay(int ms)
          Sets the delay time between each frame, or changes it for subsequent frames (applies to last frame added).
 void setDispose(int code)
          Sets the GIF frame disposal code for the last added frame and any subsequent frames.
 void setFrameRate(float fps)
          Sets frame rate in frames per second.
 void setQuality(int quality)
          Sets quality of color quantization (conversion of images to the maximum 256 colors allowed by the GIF specification).
 void setRepeat(int iter)
          Sets the number of times the set of GIF frames should be played.
 void setSize(int w, int h)
          Sets the GIF frame size.
 void setTransparent(java.awt.Color c)
          Sets the transparent color for the last added frame and any subsequent frames.
 boolean start(java.io.OutputStream os)
          Initiates GIF file creation on the given stream.
 boolean start(java.lang.String file)
          Initiates writing of a GIF file with the specified name.
protected  void writeGraphicCtrlExt()
          Writes Graphic Control Extension.
protected  void writeImageDesc()
          Writes Image Descriptor.
protected  void writeLSD()
          Writes Logical Screen Descriptor.
protected  void writeNetscapeExt()
          Writes Netscape application extension to define repeat count.
protected  void writePalette()
          Writes color table.
protected  void writePixels()
          Encodes and writes pixel data.
protected  void writeShort(int value)
          Write 16-bit value to output stream, LSB first.
protected  void writeString(java.lang.String s)
          Writes string to output stream.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

width

protected int width
int that represents the width of the image size.


height

protected int height
int that represents the height of the image size.


transparent

protected java.awt.Color transparent
Color object that represents the transparent color.


transIndex

protected int transIndex
int that represents the transparent index in the color table.


repeat

protected int repeat
int that represents the number of times to repeat the animation, DEFALUT is -1 (no repeat).


delay

protected int delay
int that represents the frame delay in hundredths.


started

protected boolean started
boolean that represents whether or not it is ready to output frames.


out

protected java.io.OutputStream out
OutputStream object for printing.


image

protected java.awt.image.BufferedImage image
BufferedImage object that represents the current frame.


pixels

protected byte[] pixels
byte array to hold RGB values from frame.


indexedPixels

protected byte[] indexedPixels
byte array to hold converted frame indexed to palette.


colorDepth

protected int colorDepth
int that represents the number of bit planes.


colorTab

protected byte[] colorTab
byte array that represents the RGB palette.


usedEntry

protected boolean[] usedEntry
boolean array to represent active palette entries.


palSize

protected int palSize
int that represents the color table size (bits-1).


dispose

protected int dispose
int that represents the disposal code (-1 = use default).


closeStream

protected boolean closeStream
boolean that represents closing the stream when finished (False) and not closing the stream (True).


firstFrame

protected boolean firstFrame
boolean that represents animation is on the first frame(True) and not on the first frame (False).


sizeSet

protected boolean sizeSet
boolean that represents getting size from first frame (False) do not get size from first frame (True).


sample

protected int sample
int that represents the default sample interval for quantizer (10).

Constructor Detail

AnimatedGifEncoder

public AnimatedGifEncoder()
Method Detail

setDelay

public void setDelay(int ms)
Sets the delay time between each frame, or changes it for subsequent frames (applies to last frame added).

Parameters:
ms - int delay time in milliseconds

setDispose

public void setDispose(int code)
Sets the GIF frame disposal code for the last added frame and any subsequent frames. Default is 0 if no transparent color has been set, otherwise 2.

Parameters:
code - int disposal code.

setRepeat

public void setRepeat(int iter)
Sets the number of times the set of GIF frames should be played. Default is 1; 0 means play infinitely. Must be invoked before the first image is added.

Parameters:
iter - int number of iterations.

setTransparent

public void setTransparent(java.awt.Color c)
Sets the transparent color for the last added frame and any subsequent frames. Since all colors are subject to modification in the quantization process, the color in the final palette for each frame closest to the given color becomes the transparent color for that frame. May be set to null to indicate no transparent color.

Parameters:
c - Color to be treated as transparent on display.

addFrame

public boolean addFrame(java.awt.image.BufferedImage im)
Adds next GIF frame. The frame is not written immediately, but is actually deferred until the next frame is received so that timing data can be inserted. Invoking finish() flushes all frames. If setSize was not invoked, the size of the first image is used for all subsequent frames.

Parameters:
im - BufferedImage containing frame to write.
Returns:
true if successful.

finish

public boolean finish()
Flushes any pending data and closes output file. If writing to an OutputStream, the stream is not closed.

Returns:
true if no exception is caught otherwise returns false

setFrameRate

public void setFrameRate(float fps)
Sets frame rate in frames per second. Equivalent to setDelay(1000/fps).

Parameters:
fps - float frame rate (frames per second)

setQuality

public void setQuality(int quality)
Sets quality of color quantization (conversion of images to the maximum 256 colors allowed by the GIF specification). Lower values (minimum = 1) produce better colors, but slow processing significantly. 10 is the default, and produces good color mapping at reasonable speeds. Values greater than 20 do not yield significant improvements in speed.

Parameters:
quality - int greater than 0.

setSize

public void setSize(int w,
                    int h)
Sets the GIF frame size. The default size is the size of the first frame added if this method is not invoked.

Parameters:
w - int frame width.
h - int frame width.

start

public boolean start(java.io.OutputStream os)
Initiates GIF file creation on the given stream. The stream is not closed automatically.

Parameters:
os - OutputStream on which GIF images are written.
Returns:
false if initial write failed.

start

public boolean start(java.lang.String file)
Initiates writing of a GIF file with the specified name.

Parameters:
file - String containing output file name.
Returns:
false if open or initial write failed.

analyzePixels

protected void analyzePixels()
Analyzes image colors and creates color map.


findClosest

protected int findClosest(java.awt.Color c)
Returns index of palette color closest to c.

Parameters:
c - a Color object
Returns:
an int representing the index of palette color closest to c

getImagePixels

protected void getImagePixels()
Extracts image pixels into byte array "pixels".


writeGraphicCtrlExt

protected void writeGraphicCtrlExt()
                            throws java.io.IOException
Writes Graphic Control Extension.

Throws:
java.io.IOException

writeImageDesc

protected void writeImageDesc()
                       throws java.io.IOException
Writes Image Descriptor.

Throws:
java.io.IOException

writeLSD

protected void writeLSD()
                 throws java.io.IOException
Writes Logical Screen Descriptor.

Throws:
java.io.IOException

writeNetscapeExt

protected void writeNetscapeExt()
                         throws java.io.IOException
Writes Netscape application extension to define repeat count.

Throws:
java.io.IOException

writePalette

protected void writePalette()
                     throws java.io.IOException
Writes color table.

Throws:
java.io.IOException

writePixels

protected void writePixels()
                    throws java.io.IOException
Encodes and writes pixel data.

Throws:
java.io.IOException

writeShort

protected void writeShort(int value)
                   throws java.io.IOException
Write 16-bit value to output stream, LSB first.

Parameters:
value - an int specifying a number to be printed as a 16-bit value
Throws:
java.io.IOException

writeString

protected void writeString(java.lang.String s)
                    throws java.io.IOException
Writes string to output stream.

Parameters:
s - a String to print to output stream
Throws:
java.io.IOException