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