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?
Как заставить его зацикливаться и устанавливать скорость?
Андерс Меландер, который написал оригинал TGIFImage , имеет следующий ответ .
Вам необходимо добавить блок расширения «Netscape Loop» в первый кадр вашего GIF. Блок цикла должен быть первым расширением, которое вы определили для фрейма, иначе он не будет работать. См. Демонстрационную версию Animate для примера создания анимированного GIF.
Вам необходимо добавить блок расширения «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 здесь .
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;
Пример того, как создать анимированный GIF, вы можете увидеть на моей домашней странице www.tolderlund.eu/delphi/. Существует также оригинальный TGIFImage для Delphi 5 и Delphi 6, Delphi 7, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009.
Нужен хотя бы таймер и некоторые методы без мерцания.
См. Пример в модуле rxAnimate.pas из библиотеки RXLibrary. (доступно бесплатно. Источники на SourceForge.net или http://www.dummzeuch.de/delphi/english.html).
Есть также источники для аналогичного компонента в JVCL.