Помощь - Поиск - Пользователи - Календарь
Полная версия: Анимированное изображение
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Cheburashka
Хотелось бы узнать, как можно вывести в на экран анимацию, и в дальнейшем с ней работать? Пробовал TImage ничего не получилось smile.gif
volvo
В библиотеке RxLib есть компонент TRxGifAnimator, который из коробки работает с анимированными изображениями. Если хочется теми средствами, которые есть в Дельфи (по крайней мере, начиная с Д2007 это точно есть) - использовать модуль GIFImg, грузить изображение в TImage, и включать анимацию:

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


На младших версиях Дельфи, скорее всего, придется покадрово записывать изображение в TImageList, и прокручивать кадры по таймеру.
TarasBer
Цитата(volvo @ 4.07.2010 13:45) *

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


А TImageList будет знать, сколько раз в секунду надо крутить анимацию? Вроде у всех гифов скорость своя.
volvo
Цитата
TImageList будет знать, сколько раз в секунду надо крутить анимацию?
А TImageList этого знать и не должен. Это должен знать Таймер. Если уж программист способен запихнуть кадры по отдельности в ImageList, то залезть в потроха GIF-а и получить частоту смена кадров для него тоже не должно составлять проблемы.
TarasBer
Цитата(volvo @ 5.07.2010 15:43) *

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


И при помощи какой функции производится залезание в потроха гифа?
Client
(Image1.Picture.Graphic as TGIFImage).AnimationSpeed
вроде это свойство
volvo
Цитата
вроде это свойство
Если у тебя есть TGifImage, то тебе не надо вручную устанавливать скорость, достаточно установить Animate в True. А залезание в потроха - читаем формат GIF-а, смотрим, где он хранит информацию о частоте смены кадров, и читаем ее прямо из файла. Мне это не нужно, я пользуюсь D2009, там есть TGifImage. Раньше, когда пользовался D6 - использовал GDI+ для отрисовки анимированных GIF-ов.
Client
для проверки - при запуске анимации скорость всегда 100 у меня показывает. Вот и подумал что это то, что нужно.
Цитата
там есть TGifImage
Это прям компонент такой? у меня его нету, может надо эту библиотеку установить?
volvo
Во втором посте написано, что надо сделать:
Цитата
uses GifImg;


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

Формат же закрыт, платен и запатентован, как я руками внутрь залезу? Стандартная функция какая-нибудь из стандартной виндовской библиотеки же должна быть?
Cheburashka
volvo, спасибо большое!
Cheburashka
Сейчас попробовал сделать так как volvo посоветвал.
К сожаоению Delphi 7 не находит 'GifImg.dcu'. Нужна другая версия Делфи? Или можно сделать ещё что-нибудь?
volvo
Цитата
Нужна другая версия Делфи?
Да, нужна Дельфи 2007 или выше. В семерке - либо рисовать через GDI+, либо подключать сторонние библиотеки. Ну, или самому разбивать GIF на кадры, и рисовать по таймеру.
Cheburashka
Рисовать по кадрам очень долго придется... так как анимации в проекте будет много. Спасибо за совет... Сейчас буду качать новую версию делфи.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.