【问题标题】:How to get frame delay from animated gif?如何从动画 gif 中获取帧延迟?
【发布时间】:2016-02-20 10:27:26
【问题描述】:

我尝试调整动画 gif 的大小。 我将每个帧的大小调整为位图,然后制作新的动画 gif 但我不知道如何获得与原始 gif 相同速度动画的帧延迟。

uses Gifimg;

procedure TForm1.FormCreate(Sender: TObject);
var
  gif: TGIFImage;
  bmp,bmp2: TBitmap;
  i:integer;
  gifren: TGIFRenderer;
  gif2:TGifImage;
begin
  gif:=TGIFImage.Create;
  gif2:=tgifimage.Create;
  bmp:=TBitmap.Create;
  bmp2:=TBitmap.Create;
    gif.LoadFromFile('d:\z.gif');
    gifren:=TGIFRenderer.Create(gif);
      for i:=0 to gif.Images.Count-1 do begin
      bmp.SetSize(gif.Width, gif.Height);
      gifren.Draw(bmp.Canvas, bmp.Canvas.ClipRect);
       bmp2.SetSize(1111,1111);
        bmp2.Canvas.StretchDraw(Rect(0, 0, 1111, 1111), bmp);

        TGIFGraphicControlExtension.Create(gif2.add(bmp2)).Delay:=10;
        gifren.NextFrame;
      end;
   TGIFAppExtNSLoop.Create(Gif2.Images.Frames[0]).Loops:=0;
   Gif2.SaveToFile('d:\gif.gif');
 end;

【问题讨论】:

  • 您可能想要投票接受的答案;)

标签: delphi gif


【解决方案1】:

参考帮助Vcl.Imaging.GIFImg.TGIFRenderer.FrameDelay

指定移动到下一帧之前的延迟时间 动画 GIF。

但请考虑调整大小的图像可能需要更多时间来渲染,并且可能无法跟上步伐。

【讨论】:

  • GIF 延迟时间以 1/100 秒为单位,@Wataru。我不确定您为什么认为该值以毫秒为单位。
  • 除以 10 我得到与原始 gif 相同的动画速度
  • @Waturo 你真的没有在听。你也没有提供任何信息。你说你将某物除以 10,但你没有说那是什么。我的直觉告诉我,某事是以毫秒为单位的值。
  • TGIFGraphicControlExtension.Create(gif2.add(bmp2)).Delay:=GIFRen.FrameDelay div 10;
  • 现在您已经介绍了 TGIFGraphicControlExtension.Delay。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 2010-11-11
相关资源
最近更新 更多