Package org.meteoinfo.image
Class GifDecoder
- java.lang.Object
-
- org.meteoinfo.image.GifDecoder
-
public class GifDecoder extends java.lang.ObjectClass 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.
-
-
Field Summary
Fields Modifier and Type Field Description protected int[]actprotected intbgColorprotected intbgIndexprotected byte[]blockprotected intblockSizeprotected intdelayprotected intdisposeprotected intframeCountprotected java.util.ArrayListframesprotected int[]gctprotected booleangctFlagprotected intgctSizeprotected intheightprotected intihprotected java.awt.image.BufferedImageimageprotected java.io.BufferedInputStreaminprotected booleaninterlaceprotected intiwprotected intixprotected intiyprotected intlastBgColorprotected intlastDisposeprotected java.awt.image.BufferedImagelastImageprotected java.awt.RectanglelastRectprotected int[]lctprotected booleanlctFlagprotected intlctSizeprotected intloopCountprotected static intMaxStackSizeprotected intpixelAspectprotected byte[]pixelsprotected byte[]pixelStackprotected short[]prefixprotected intstatusstatic intSTATUS_FORMAT_ERRORFile read status: Error decoding file (may be partially decoded)static intSTATUS_OKFile read status: No errors.static intSTATUS_OPEN_ERRORFile read status: Unable to open source.protected byte[]suffixprotected inttransIndexprotected booleantransparencyprotected intwidth
-
Constructor Summary
Constructors Constructor Description GifDecoder()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voiddecodeImageData()Decodes LZW image data into pixel array.protected booleanerr()Returns true if an error was encountered during reading/decodingintgetDelay(int n)Gets display duration for specified frame.java.awt.image.BufferedImagegetFrame(int n)Gets the image contents of frame n.intgetFrameCount()Gets the number of frames read from file.java.awt.DimensiongetFrameSize()Gets image size.java.awt.image.BufferedImagegetImage()Gets the first (or only) image read.intgetLoopCount()Gets the "Netscape" iteration count, if any.protected voidinit()Initializes or re-initializes readerprotected intread()Reads a single byte from the input stream.intread(java.io.BufferedInputStream is)Reads GIF image from streamintread(java.io.InputStream is)Reads GIF image from streamintread(java.lang.String name)Reads GIF file from specified file/URL source (URL assumed if name contains ":/" or "file:")protected intreadBlock()Reads next variable length block from input.protected int[]readColorTable(int ncolors)Reads color table as 256 RGB integer valuesprotected voidreadContents()Main file parser.protected voidreadGraphicControlExt()Reads Graphics Control Extension valuesprotected voidreadHeader()Reads GIF file header information.protected voidreadImage()Reads next frame imageprotected voidreadLSD()Reads Logical Screen Descriptorprotected voidreadNetscapeExt()Reads Netscape extenstion to obtain iteration countprotected intreadShort()Reads next 16-bit value, LSB firstprotected voidresetFrame()Resets frame state for reading next image.protected voidsetPixels()Creates new frame image from current data (and previous frames as specified by their disposition codes).protected voidskip()Skips variable length blocks up to and including next zero length block.
-
-
-
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 frames
-
frameCount
protected int frameCount
-
-
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.- 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 is)
Reads GIF image from stream- Parameters:
BufferedInputStream- containing GIF file.- Returns:
- read status code (0 = no errors)
-
read
public int read(java.io.InputStream is)
Reads GIF image from stream- Parameters:
InputStream- 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.
-
-