Хотелось бы узнать, как можно вывести в на экран анимацию, и в дальнейшем с ней работать? Пробовал TImage ничего не получилось
volvo
4.07.2010 16:45
В библиотеке RxLib есть компонент 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-а, смотрим, где он хранит информацию о частоте смены кадров, и читаем ее прямо из файла.
Формат же закрыт, платен и запатентован, как я руками внутрь залезу? Стандартная функция какая-нибудь из стандартной виндовской библиотеки же должна быть?
Cheburashka
6.07.2010 17:31
volvo, спасибо большое!
Cheburashka
10.07.2010 17:26
Сейчас попробовал сделать так как volvo посоветвал. К сожаоению Delphi 7 не находит 'GifImg.dcu'. Нужна другая версия Делфи? Или можно сделать ещё что-нибудь?
volvo
10.07.2010 17:34
Цитата
Нужна другая версия Делфи?
Да, нужна Дельфи 2007 или выше. В семерке - либо рисовать через GDI+, либо подключать сторонние библиотеки. Ну, или самому разбивать GIF на кадры, и рисовать по таймеру.
Cheburashka
10.07.2010 17:39
Рисовать по кадрам очень долго придется... так как анимации в проекте будет много. Спасибо за совет... Сейчас буду качать новую версию делфи.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.