Как отобразить плавное видео в FireMonkey (FMX, FM3)?

Кто-нибудь придумал, как отобразить плавное видео (то есть серию растровых изображений) в приложении FireMonkey, HD или 3D? В VCL вы можете писать на холст из потока, и это будет прекрасно работать, но это не работает в FMX. Что еще хуже, очевидно, что единственный надежный способ — использовать TImage, который, кажется, обновляется из основного потока (откройте меню и видео временно зависнет). Все примеры EMB, которые я мог найти, либо пишут в TImage из основного потока, либо используют Synchronize (). Эти ограничения делают FMX непригодным для приличного отображения видео, поэтому я ищу взлом или, возможно, обход FMX. Я использую XE5 / C ++, но приветствую любые предложения. Целевой ОС является Windows 7+ & OS X. Спасибо!

7

Решение

Как насчет размещения TPaintbox в вашей форме для хранения видео. В методе OnPaint вы просто рисуете следующий фрейм на холсте Paintbox. Теперь поместите TTimer в форму, установите интервал на требуемую частоту кадров. В событии OnTimer для таймера просто напишите paintbox1.repaint

Это должно дать вам регулярные кадры независимо от того, что еще делает программа.

Для дополнительной безопасности вы можете увеличить номер кадра в событии OnTimer. Теперь в методе рисования Paintbox вы знаете, какой кадр рисовать. Это означает, что вы не будете переходить между кадрами, если что-то еще вызывает метод рисования, а также таймер — вы просто перекрасите этот же кадр для дополнительного вызова OnPaint.

Я использую это для марширующих выделений муравьев, хотя я делаю еще один шаг и использую наложенный холст, чтобы я мог рисовать независимо от выделения и нижележащего холста краски, чтобы избавить от необходимости перекрашивать основной холст при изменении выделения. Это требует вызовов API, но я думаю, что вам это не понадобится, если вы не делаете видео с прозрачным цветом.

0

Другие решения

Дальнейшие исследования, в том числе некоторые переговоры с Странствующий разработчик, к сожалению, ясно дал понять, что из-за ограничений параллелизма FM был спроектирован так, чтобы весь доступ к графическому процессору проходил через основной поток и, следовательно, рисование всегда было ограничено. В результате я решил, что FM не подходит для моих нужд, и я переоцениваю свои варианты.

0

По вопросам рекламы [email protected]