2012-08-08 5 views
3

Я пытаюсь отобразить анимированный GIF в формате Firemonkey HD с использованием TImage, но я не вижу никаких методов анимации.Анимированный GIF в Firemonkey

Использование Vcl.Imaging.gifImg не является вариантом, поскольку типы отличаются.

Может кто-нибудь предложить способ решить эту проблему или, возможно, компонент для анимации изображений GIF под Firemonkey?

Единственный способ, которым я нашел на данный момент является:

  1. создать экземпляр TGIFImage и загрузите изображение GIF

  2. проходное gif.images:

    а. сохранить текущее изображение в потоке

    b. Image1.bitmap.loadFromStream [Image1 is FMX: TImage]

Есть ли разумное решение?

+0

Если вы сделаете визуализацию в фоновом потоке, тогда решение может быть не таким глупым, как вы думаете. Даже если FMX имел его изначально - он все еще и сделал именно так - через переключение кадров по фоновому потоку. otl.17slon.com может сделать потоки немного проще –

+0

u также можете посмотреть библиотеку Vampyre Imaging, это поддержка clix FMX в Mercurial (но, очевидно, не в выпусках, выпущенных в 2009 году). Однако, вероятно, вы все равно будете использовать рабочий поток кадров. Но я не знаю. –

+1

Arioch 'The: не TTimer лучше и проще выбора, чем при использовании потоков?Они оба попадают в очередь сообщений в приложении. Также один поток на GIF будет потреблять ресурсы ... –

ответ

3

Вы можете использовать TBitmapListAnimation с одним изображением, которое имеет каждый кадр анимации внутри длинной полосы. например, если ваша анимация имеет 4 кадров и 32px по 32px, то вам необходимо создать изображение 128px в ширину 32px высокой и добавить каждую сторону кадра бок ...

Затем добавьте TImage форме (вам не нужно загружать растровое изображение в этом)

Добавить в TBitmapListAnimation с TImage, как это родительский

Двойной щелчок AnimationBitmap и загрузить анимацию полосы изображения

Кропите PropertyName и выбрать Bitmap

Set AnimationCount до 4 и AnimationRowCount 1 для этого примера

Set включен истинной

TBitmapListAnimation имеет хороший контроль над ставками покадровой анимации, реверсирования, цикл и интерполяция. Я не мог найти способ получить .gif для анимации в FireMonkey2, но если у вас есть средства для преобразования анимированного .gif в «мультяшную полосу», тогда это хороший способ сделать анимацию.

PS Это Delphi XE3 ... так что не могу сказать, существовали ли эти компоненты в предыдущей версии.

+1

Я считаю, что так работает «TAniIndicator» в XE3. Правильный термин для «мультяшной полосы» - это спрайты или список спрайтов. :) –

Смежные вопросы