Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Анимированное изображение

Автор: Сергей Меркурьев 4.07.2010 14:02

Хотелось бы узнать, как можно вывести в на экран анимацию, и в дальнейшем с ней работать? Пробовал TImage ничего не получилось smile.gif

Автор: volvo 4.07.2010 16:45

В библиотеке http://rx.delphiplus.org/ есть компонент TRxGifAnimator, который из коробки работает с анимированными изображениями. Если хочется теми средствами, которые есть в Дельфи (по крайней мере, начиная с Д2007 это точно есть) - использовать модуль GIFImg, грузить изображение в TImage, и включать анимацию:

uses GifImg;
// ...
Image1.Picture.LoadFromFile('blink.gif');
(Image1.Picture.Graphic as TGIFImage).Animate := True;


На младших версиях Дельфи, скорее всего, придется покадрово записывать изображение в TImageList, и прокручивать кадры по таймеру.

Автор: TarasBer 5.07.2010 13:52

Цитата(volvo @ 4.07.2010 13:45) *

На младших версиях Дельфи, скорее всего, придется покадрово записывать изображение в TImageList, и прокручивать кадры по таймеру.


А TImageList будет знать, сколько раз в секунду надо крутить анимацию? Вроде у всех гифов скорость своя.

Автор: volvo 5.07.2010 18:43

Цитата
TImageList будет знать, сколько раз в секунду надо крутить анимацию?
А TImageList этого знать и не должен. Это должен знать Таймер. Если уж программист способен запихнуть кадры по отдельности в ImageList, то залезть в потроха GIF-а и получить частоту смена кадров для него тоже не должно составлять проблемы.

Автор: TarasBer 5.07.2010 19:16

Цитата(volvo @ 5.07.2010 15:43) *

А TImageList этого знать и не должен. Это должен знать Таймер. Если уж программист способен запихнуть кадры по отдельности в ImageList, то залезть в потроха GIF-а и получить частоту смена кадров для него тоже не должно составлять проблемы.


И при помощи какой функции производится залезание в потроха гифа?

Автор: Client 5.07.2010 19:38

(Image1.Picture.Graphic as TGIFImage).AnimationSpeed
вроде это свойство

Автор: volvo 5.07.2010 19:44

Цитата
вроде это свойство
Если у тебя есть TGifImage, то тебе не надо вручную устанавливать скорость, достаточно установить Animate в True. А залезание в потроха - читаем формат GIF-а, смотрим, где он хранит информацию о частоте смены кадров, и читаем ее прямо из файла. Мне это не нужно, я пользуюсь D2009, там есть TGifImage. Раньше, когда пользовался D6 - использовал GDI+ для отрисовки анимированных GIF-ов.

Автор: Client 5.07.2010 19:50

для проверки - при запуске анимации скорость всегда 100 у меня показывает. Вот и подумал что это то, что нужно.

Цитата
там есть TGifImage
Это прям компонент такой? у меня его нету, может надо эту библиотеку установить?

Автор: volvo 5.07.2010 20:03

Во втором посте написано, что надо сделать:

Цитата
uses GifImg;


Да, это невизуальный компонент... Его нет в палитре.

Автор: TarasBer 5.07.2010 20:48

> А залезание в потроха - читаем формат GIF-а, смотрим, где он хранит информацию о частоте смены кадров, и читаем ее прямо из файла.

Формат же закрыт, платен и запатентован, как я руками внутрь залезу? Стандартная функция какая-нибудь из стандартной виндовской библиотеки же должна быть?

Автор: Сергей Меркурьев 6.07.2010 17:31

volvo, спасибо большое!

Автор: Сергей Меркурьев 10.07.2010 17:26

Сейчас попробовал сделать так как volvo посоветвал.
К сожаоению Delphi 7 не находит 'GifImg.dcu'. Нужна другая версия Делфи? Или можно сделать ещё что-нибудь?

Автор: volvo 10.07.2010 17:34

Цитата
Нужна другая версия Делфи?
Да, нужна Дельфи 2007 или выше. В семерке - либо рисовать через GDI+, либо подключать сторонние библиотеки. Ну, или самому разбивать GIF на кадры, и рисовать по таймеру.

Автор: Сергей Меркурьев 10.07.2010 17:39

Рисовать по кадрам очень долго придется... так как анимации в проекте будет много. Спасибо за совет... Сейчас буду качать новую версию делфи.