首先是看代码:
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 动画。如果你知道,欢迎一起交流。
