在delphi 2009中创建一个gif动画文件?

时间:2009-05-30 18:34:28

标签: delphi delphi-2009

gif := TgifImage.Create;
gif.Width := 100;
gif.Height := 100;
gif.AnimationSpeed := 500;
gif.Animate := true;
gif.add(image1.Picture.Bitmap);
gif.add(image2.Picture.Bitmap);
gif.add(image3.Picture.Bitmap);
gif.SaveToFile('gif.gif');

这只循环一次,速度不是500?

如何让它循环并设定速度?

4 个答案:

答案 0 :(得分:6)

编写原始TGIFImage的Anders Melander有以下answer

  

您需要在GIF的第一帧添加“Netscape Loop”扩展程序段。   循环块必须是您为框架定义的第一个扩展,否则它将无法工作。

     

有关如何构建动画GIF的示例,请参阅Animate demo

以下是Animate demo的代码摘录:

// Add the source image to the animation
Result := GIF.Add(Source);

// Netscape Loop extension must be the first extension in the first frame!
if (GIF.Images.Count = 1) then
begin
  LoopExt := TGIFAppExtNSLoop.Create(Result);
  LoopExt.Loops := 0; // Number of loops (0 = forever)
end;

您可以查看TGIFImage documentation here

答案 1 :(得分:2)

var Gif:TGifImage;
begin
    //Setting the delay for each frame
    TGIFGraphicControlExtension.Create(Gif.Add(image1.Picture.Bitmap)).Delay := 300;
    TGIFGraphicControlExtension.Create(Gif.Add(image2.Picture.Bitmap)).Delay := 300;
    TGIFGraphicControlExtension.Create(Gif.Add(image3.Picture.Bitmap)).Delay := 300;
    //Adding loop extension in the first frame (0 = forever)
    TGIFAppExtNSLoop.Create(Gif.Images.Frames[0]).Loops := 0;

    Gif.SaveToFile('gif.gif');
end;

答案 2 :(得分:1)

您可以在我的主页www.tolderlund.eu/delphi/上找到如何创建动画GIF的示例。 还有Delphi 5和Delphi 6,Delphi 7,Delphi 2005,Delphi 2006,Delphi 2007,Delphi 2009的原始TGIFImage。

答案 3 :(得分:-1)

至少需要一个计时器和一些无闪烁的方法。

请参阅RXLibrary中的单元rxAnimate.pas中的示例 (免费提供。来源于SourceForge.net或http://www.dummzeuch.de/delphi/english.html)。

JVCL也有类似组件的来源。