Code archives/Graphics/LoadAnimGif
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| Load animated GIF and returns an animImage. Stores number of frames in gifframecount global var. | |||||
; Animated Gif file loader by Peter Scheutz 2003.03.13
; Load animated Gif and returns an animImage
; Stores number of frames in gifframecount
Global gifframecount
; useage:
myanim=LoadAnimGif("mygif.gif")
Function LoadAnimGif(fname$)
Local fbank
Local f
Local thegif
Local animPic
Local count
Local framecount
fbank=CreateBank(FileSize(fname$))
f=OpenFile(fname$)
ReadBytes fbank,f,0,BankSize(fbank)
CloseFile f
; This is a quick hack and not quite good enough,
; as it could count too many frames
; Works for all the gifs I tested though...
; Looks for "Gif magic marker"
For n=0 To BankSize(fbank)-1
If PeekByte(fbank,n)=0
If PeekByte(fbank,n+1)=33
If PeekByte(fbank,n+2)=249
;DebugLog "Gif Magic found at: " + n
framecount=framecount+1
EndIf
EndIf
EndIf
Next
FreeBank fbank
thegif=OpenMovie(fname$)
animPic=CreateImage(MovieWidth(thegif),MovieHeight(thegif),framecount)
SetBuffer BackBuffer()
count=0
While MoviePlaying(thegif) And count<framecount
DrawMovie thegif,0,0
GrabImage animPic,0,0,count
count=count+1
Wend
CloseMovie thegif
Cls
Flip
; store framecount in global variable
gifframecount=framecount
Return animPic
End Function |
Comments
| ||
| There is a bug in this code, since DrawMovie is being used to draw to the BackBuffer it only draws to the size of the chosen screen resolution (defined by you) Therefore if your gif is bigger then the screen you will have parts of your gif missing. Simply render to the imagebuffer instead of the backbuffer. Replace:- SetBuffer BackBuffer() with SetBuffer ImageBuffer(animPic) |
Code Archives Forum