首先是看代码:
var AGif: TGifImage; ABitmap: TBitmap; i: Integer; ALoopExt:TGIFAppExtNSLoop; begin AGif := TGifImage.Create; AGif.SetSize(100, 100); ABitmap := TBitmap.Create; ABitmap.SetSize(100, 100); for i := 9 downto 0 do begin ABitmap.Canvas.FillRect(Rect(0, 0, 100, 100)); ABitmap.Canvas.TextOut(i * 10, 30, IntToStr(i)); if i = 9 then TGIFAppExtNSLoop.Create(AGif.Add(ABitmap)) else AGif.Add(ABitmap); end; AGif.AnimationSpeed := 100; Image1.Picture.Assign(AGif); TGifImage(Image1.Picture.Graphic).Animate := true; FreeAndNil(ABitmap); FreeAndNil(AGif); end;
这段代码实现的是绘制了一个从右到左的,从 9 变到 0 的小动画,动画每帧间隔为 100ms,我们用一个 TImage 的实例 Image1 来显示。
这里,有一个关键的地方,是为动画添加 TGIFAppExtNSLoop 扩展,如果不设置,动画将只播放一次就停了。添加扩展后,这个动画就可以无限循环下去或者循环指定的次数(通过设置 TGIFAppExtNSLoop 的 Loops 属性)。
这里有一个问题,就是 TGIFImage 每帧的间隔时间是固定的,我没看到在那儿能够设置非匀速的 GIF 动画。如果你知道,欢迎一起交流。