java.lang.Object
org.miaixz.bus.extra.image.gif.GifDecoder
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 questions at fmsware.com.-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected int[]The active color table.protected intThe background color.protected intThe background color index.protected byte[]The current data block.protected intThe size of the current block.protected intThe delay in milliseconds.protected intThe disposal method for the last graphic control extension.protected intThe total number of frames.protected ArrayList<org.miaixz.bus.extra.image.gif.GifDecoder.GifFrame> List of frames read from the current file.protected int[]The global color table.protected booleanFlag indicating if a global color table is used.protected intSize of the global color table.protected intThe full image height.protected intThe current image rectangle coordinates and dimensions.protected BufferedImageThe current frame image.protected BufferedInputStreamThe buffered input stream.protected booleanFlag indicating if the image is interlaced.protected intThe current image rectangle coordinates and dimensions.protected intThe current image rectangle coordinates and dimensions.protected intThe current image rectangle coordinates and dimensions.protected intThe previous background color.protected intThe last disposal method used.protected BufferedImageThe previous frame image.protected RectangleThe last image rectangle.protected int[]The local color table.protected booleanFlag indicating if a local color table is used.protected intThe size of the local color table.protected intNumber of iterations; 0 means repeat forever.protected static final intThe maximum decoder pixel stack size.protected intThe pixel aspect ratio.protected byte[]Byte array of pixel data.protected byte[]LZW decoder working array.protected short[]LZW decoder working array.protected intThe current status of the decoder.static final intFile read status: Error decoding file (may be partially decoded)static final intFile read status: No errors.static final intFile read status: Unable to open source.protected byte[]LZW decoder working array.protected intThe transparent color index.protected booleanFlag indicating if a transparent color is used.protected intThe full image width. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidDecodes 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.getFrame(int n) Gets the image contents of frame n.intGets the number of frames read from file.Gets image size.getImage()Gets the first (or only) image read.intGets the "Netscape" iteration count, if any.protected voidinit()Initializes or re-initializes readerprotected intread()Reads a single byte from the input stream.intReads GIF image from streamintread(InputStream is) Reads GIF image from streamintReads GIF file from specified file/URL source (URL assumed if name contains ":/" or "file:")protected intReads next variable length block from input.protected int[]readColorTable(int ncolors) Reads color table as 256 RGB integer valuesprotected voidMain file parser.protected voidReads Graphics Control Extension valuesprotected voidReads GIF file header information.protected voidReads next frame imageprotected voidreadLSD()Reads Logical Screen Descriptorprotected voidReads Netscape extenstion to obtain iteration countprotected intReads next 16-bit value, LSB firstprotected voidResets frame state for reading next image.protected voidCreates 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 Details
-
STATUS_OK
public static final int STATUS_OKFile read status: No errors.- See Also:
-
STATUS_FORMAT_ERROR
public static final int STATUS_FORMAT_ERRORFile read status: Error decoding file (may be partially decoded)- See Also:
-
STATUS_OPEN_ERROR
public static final int STATUS_OPEN_ERRORFile read status: Unable to open source.- See Also:
-
MaxStackSize
protected static final int MaxStackSizeThe maximum decoder pixel stack size.- See Also:
-
in
The buffered input stream. -
status
protected int statusThe current status of the decoder. -
width
protected int widthThe full image width. -
height
protected int heightThe full image height. -
gctFlag
protected boolean gctFlagFlag indicating if a global color table is used. -
gctSize
protected int gctSizeSize of the global color table. -
loopCount
protected int loopCountNumber of iterations; 0 means repeat forever. -
gct
protected int[] gctThe global color table. -
lct
protected int[] lctThe local color table. -
act
protected int[] actThe active color table. -
bgIndex
protected int bgIndexThe background color index. -
bgColor
protected int bgColorThe background color. -
lastBgColor
protected int lastBgColorThe previous background color. -
pixelAspect
protected int pixelAspectThe pixel aspect ratio. -
lctFlag
protected boolean lctFlagFlag indicating if a local color table is used. -
interlace
protected boolean interlaceFlag indicating if the image is interlaced. -
lctSize
protected int lctSizeThe size of the local color table. -
ix
protected int ixThe current image rectangle coordinates and dimensions. -
iy
protected int iyThe current image rectangle coordinates and dimensions. -
iw
protected int iwThe current image rectangle coordinates and dimensions. -
ih
protected int ihThe current image rectangle coordinates and dimensions. -
lastRect
The last image rectangle. -
image
The current frame image. -
lastImage
The previous frame image. -
block
protected byte[] blockThe current data block. -
blockSize
protected int blockSizeThe size of the current block. -
dispose
protected int disposeThe disposal method for the last graphic control extension. -
lastDispose
protected int lastDisposeThe last disposal method used. -
transparency
protected boolean transparencyFlag indicating if a transparent color is used. -
delay
protected int delayThe delay in milliseconds. -
transIndex
protected int transIndexThe transparent color index. -
prefix
protected short[] prefixLZW decoder working array. -
suffix
protected byte[] suffixLZW decoder working array. -
pixelStack
protected byte[] pixelStackLZW decoder working array. -
pixels
protected byte[] pixelsByte array of pixel data. -
frames
List of frames read from the current file. -
frameCount
protected int frameCountThe total number of frames.
-
-
Constructor Details
-
GifDecoder
public GifDecoder()
-
-
Method Details
-
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
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
Gets the image contents of frame n.- Parameters:
n- the frame index.- Returns:
- BufferedImage representation of frame, or null if n is invalid.
-
getFrameSize
Gets image size.- Returns:
- GIF image dimensions
-
read
Reads GIF image from stream- Parameters:
is- BufferedInputStream containing GIF file.- Returns:
- read status code (0 = no errors)
-
read
Reads GIF image from stream- Parameters:
is- InputStream containing GIF file.- Returns:
- read status code (0 = no errors)
-
read
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- Returns:
- true if an error occurred.
-
init
protected void init()Initializes or re-initializes reader -
read
protected int read()Reads a single byte from the input stream.- Returns:
- the byte read.
-
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- Returns:
- the 16-bit value.
-
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.
-