создать анимированный GIF-файл в Delphi 2009? - PullRequest
5 голосов
/ 30 мая 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 ]

6 голосов
/ 30 мая 2009

Андерс Меландер, который написал оригинал TGIFImage , имеет следующий ответ .

Вам необходимо добавить блок расширения «Netscape Loop» в первый кадр вашего GIF. Блок цикла должен быть первым расширением, которое вы определили для фрейма, иначе он не будет работать.

См. Демонстрационную версию Animate для примера создания анимированного GIF.

Вот фрагмент кода из демоверсии Animate :

// 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 здесь .

2 голосов
/ 31 мая 2009
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;
1 голос
/ 31 мая 2009

Пример того, как создать анимированный GIF, вы можете увидеть на моей домашней странице www.tolderlund.eu/delphi/. Существует также оригинальный TGIFImage для Delphi 5 и Delphi 6, Delphi 7, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009.

0 голосов
/ 30 мая 2009

Нужен хотя бы таймер и некоторые методы без мерцания.

См. Пример в модуле rxAnimate.pas из библиотеки RXLibrary. (доступно бесплатно. Источники на SourceForge.net или http://www.dummzeuch.de/delphi/english.html).

Есть также источники для аналогичного компонента в JVCL.

...