我发现使用Delphi 2009创建的动画GIF TGIFImage有时在某些 GIF查看器中无法正常播放.问题是动画过早地重新启动.
请考虑以下示例:
program GIFAnomaly;
{$APPTYPE CONSOLE}
uses
Windows, Types, Classes, SysUtils, Graphics, GIFImg;
var
g: TGIFImage;
bm: TBitmap;
procedure MakeFrame(n: integer);
var
x: Integer;
y: Integer;
begin
for x := 0 to 256 - 1 do
for y := 0 to 256 - 1 do
bm.Canvas.Pixels[x, y] := RGB((x + n) mod 255,
(x + y - 2*n) mod 255, (x*y*n div 500) mod 255);
end;
var
i: integer;
begin
bm := TBitmap.Create;
bm.SetSize(256, 256); …Run Code Online (Sandbox Code Playgroud) DelphiTGIFImage有以下事件:OnPaint、OnAfterPaint、OnLoop、OnEndPaint。但在显示动画 GIF 时,这些事件都不会被调用。
我使用以下代码来显示动画 GIF:
FGif := (Image1.Picture.Graphic as TGIFImage);
FGif.OnProgress := GifProgress;
FGif.OnLoop := GifLoop;
FGif.OnPaint := GifPaint;
FGif.OnEndPaint := GifEndPaint;
FGif.OnAfterPaint := GifAfterPaint;
FGif.Animate := True;
Run Code Online (Sandbox Code Playgroud)
动画播放时如何提取当前可见帧索引?
如何检测动画何时完成?
如何检测下一帧何时显示?
OnProgress仅在绘制最后一个动画帧后的第一个动画循环期间调用事件 - TGIFImage 将从第一帧继续动画,但此事件停止工作。
我正在使用 Delphi 10.2 东京。