org.opensourcephysics.media.gif
Class GifDecoder

java.lang.Object
  extended by org.opensourcephysics.media.gif.GifDecoder

public class GifDecoder
extends java.lang.Object

Class GifDecoder - Decodes a GIF file into one or more frames.

 Example:
    GifDecoder d = new GifDecoder();
    d.read("sample.gif");
    int n = d.getFrameCount();
    for (int i = 0; i < n; i++) {
       BufferedImage frame = d.getFrame(i);  // frame i
       int t = d.getDelay(i);  // display duration of frame in milliseconds
       // do something with frame
    }
 
No copyright asserted on the source code of this class. May be used for any purpose, however, refer to the Unisys LZW patent for any additional restrictions. Please forward any corrections to kweiner@fmsware.com.

Version:
1.03 November 2003
Author:
Kevin Weiner, FM Software; LZW decoder adapted from John Cristy's ImageMagick.

Field Summary
protected  int[] act
           
protected  int bgColor
           
protected  int bgIndex
           
protected  byte[] block
           
protected  int blockSize
           
protected  int delay
           
protected  int dispose
           
protected  int frameCount
           
protected  java.util.ArrayList<org.opensourcephysics.media.gif.GifDecoder.GifFrame> frames
           
protected  int[] gct
           
protected  boolean gctFlag
           
protected  int gctSize
           
protected  int height
           
protected  int ih
           
protected  java.awt.image.BufferedImage image
           
protected  java.io.BufferedInputStream in
           
protected  boolean interlace
           
protected  int iw
           
protected  int ix
           
protected  int iy
           
protected  int lastBgColor
           
protected  int lastDispose
           
protected  java.awt.image.BufferedImage lastImage
           
protected  java.awt.Rectangle lastRect
           
protected  int[] lct
           
protected  boolean lctFlag
           
protected  int lctSize
           
protected  int loopCount
           
protected static int MaxStackSize
           
protected  int pixelAspect
           
protected  byte[] pixels
           
protected  byte[] pixelStack
           
protected  short[] prefix
           
protected  int status
           
static int STATUS_FORMAT_ERROR
          File read status: Error decoding file (may be partially decoded)
static int STATUS_OK
          File read status: No errors.
static int STATUS_OPEN_ERROR
          File read status: Unable to open source.
protected  byte[] suffix
           
protected  int transIndex
           
protected  boolean transparency
           
protected  int width
           
 
Constructor Summary
GifDecoder()
           
 
Method Summary
protected  void decodeImageData()
          Decodes LZW image data into pixel array.
protected  boolean err()
          Returns true if an error was encountered during reading/decoding
 int getDelay(int n)
          Gets display duration for specified frame.
 java.awt.image.BufferedImage getFrame(int n)
          Gets the image contents of frame n.
 int getFrameCount()
          Gets the number of frames read from file.
 java.awt.Dimension getFrameSize()
          Gets image size.
 java.awt.image.BufferedImage getImage()
          Gets the first (or only) image read.
 int getLoopCount()
          Gets the "Netscape" iteration count, if any.
protected  void init()
          Initializes or re-initializes reader
protected  int read()
          Reads a single byte from the input stream.
 int read(java.io.BufferedInputStream input)
          Reads GIF image from stream
 int read(java.lang.String name)
          Reads GIF file from specified file/URL source (URL assumed if name contains ":/" or "file:")
protected  int readBlock()
          Reads next variable length block from input.
protected  int[] readColorTable(int ncolors)
          Reads color table as 256 RGB integer values
protected  void readContents()
          Main file parser.
protected  void readGraphicControlExt()
          Reads Graphics Control Extension values
protected  void readHeader()
          Reads GIF file header information.
protected  void readImage()
          Reads next frame image
protected  void readLSD()
          Reads Logical Screen Descriptor
protected  void readNetscapeExt()
          Reads Netscape extenstion to obtain iteration count
protected  int readShort()
          Reads next 16-bit value, LSB first
protected  void resetFrame()
          Resets frame state for reading next image.
protected  void setPixels()
          Creates new frame image from current data (and previous frames as specified by their disposition codes).
protected  void skip()
          Skips variable length blocks up to and including next zero length block.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

STATUS_OK

public static final int STATUS_OK
File read status: No errors.

See Also:
Constant Field Values

STATUS_FORMAT_ERROR

public static final int STATUS_FORMAT_ERROR
File read status: Error decoding file (may be partially decoded)

See Also:
Constant Field Values

STATUS_OPEN_ERROR

public static final int STATUS_OPEN_ERROR
File read status: Unable to open source.

See Also:
Constant Field Values

in

protected java.io.BufferedInputStream in

status

protected int status

width

protected int width

height

protected int height

gctFlag

protected boolean gctFlag

gctSize

protected int gctSize

loopCount

protected int loopCount

gct

protected int[] gct

lct

protected int[] lct

act

protected int[] act

bgIndex

protected int bgIndex

bgColor

protected int bgColor

lastBgColor

protected int lastBgColor

pixelAspect

protected int pixelAspect

lctFlag

protected boolean lctFlag

interlace

protected boolean interlace

lctSize

protected int lctSize

ix

protected int ix

iy

protected int iy

iw

protected int iw

ih

protected int ih

lastRect

protected java.awt.Rectangle lastRect

image

protected java.awt.image.BufferedImage image

lastImage

protected java.awt.image.BufferedImage lastImage

block

protected byte[] block

blockSize

protected int blockSize

dispose

protected int dispose

lastDispose

protected int lastDispose

transparency

protected boolean transparency

delay

protected int delay

transIndex

protected int transIndex

MaxStackSize

protected static final int MaxStackSize
See Also:
Constant Field Values

prefix

protected short[] prefix

suffix

protected byte[] suffix

pixelStack

protected byte[] pixelStack

pixels

protected byte[] pixels

frames

protected java.util.ArrayList<org.opensourcephysics.media.gif.GifDecoder.GifFrame> frames

frameCount

protected int frameCount
Constructor Detail

GifDecoder

public GifDecoder()
Method Detail

getDelay

public int getDelay(int n)
Gets display duration for specified frame.

Parameters:
n - int index of frame
Returns:
delay in milliseconds

getFrameCount

public int getFrameCount()
Gets the number of frames read from file.

Returns:
frame count

getImage

public java.awt.image.BufferedImage getImage()
Gets the first (or only) image read.

Returns:
BufferedImage containing first frame, or null if none.

getLoopCount

public int getLoopCount()
Gets the "Netscape" iteration count, if any. A count of 0 means repeat indefinitiely.

Returns:
iteration count if one was specified, else 1.

setPixels

protected void setPixels()
Creates new frame image from current data (and previous frames as specified by their disposition codes).


getFrame

public java.awt.image.BufferedImage getFrame(int n)
Gets the image contents of frame n.

Parameters:
n - the frame number
Returns:
BufferedImage representation of frame, or null if n is invalid.

getFrameSize

public java.awt.Dimension getFrameSize()
Gets image size.

Returns:
GIF image dimensions

read

public int read(java.io.BufferedInputStream input)
Reads GIF image from stream

Parameters:
input - the BufferedInputStream containing GIF file.
Returns:
read status code (0 = no errors)

read

public int read(java.lang.String name)
Reads GIF file from specified file/URL source (URL assumed if name contains ":/" or "file:")

Parameters:
name - String containing source
Returns:
read status code (0 = no errors)

decodeImageData

protected void decodeImageData()
Decodes LZW image data into pixel array. Adapted from John Cristy's ImageMagick.


err

protected boolean err()
Returns true if an error was encountered during reading/decoding


init

protected void init()
Initializes or re-initializes reader


read

protected int read()
Reads a single byte from the input stream.


readBlock

protected int readBlock()
Reads next variable length block from input.

Returns:
number of bytes stored in "buffer"

readColorTable

protected int[] readColorTable(int ncolors)
Reads color table as 256 RGB integer values

Parameters:
ncolors - int number of colors to read
Returns:
int array containing 256 colors (packed ARGB with full alpha)

readContents

protected void readContents()
Main file parser. Reads GIF content blocks.


readGraphicControlExt

protected void readGraphicControlExt()
Reads Graphics Control Extension values


readHeader

protected void readHeader()
Reads GIF file header information.


readImage

protected void readImage()
Reads next frame image


readLSD

protected void readLSD()
Reads Logical Screen Descriptor


readNetscapeExt

protected void readNetscapeExt()
Reads Netscape extenstion to obtain iteration count


readShort

protected int readShort()
Reads next 16-bit value, LSB first


resetFrame

protected void resetFrame()
Resets frame state for reading next image.


skip

protected void skip()
Skips variable length blocks up to and including next zero length block.