有没有人想出如何在FireMonkey应用程序,HD或3D中显示流畅的视频(即一系列位图)?在VCL中,您可以从一个线程写入画布,这将完美地工作,但这在FMX中不起作用.更糟糕的是,显然唯一可靠的方法是使用T
Image,这似乎是从主线程更新(打开菜单和视频暂时冻结).我可以找到的所有EMB示例都可以从主线程写入TImage,或者使用Synchronize().这些限制使FMX无法用于体面的视频显示,因此我正在寻找黑客或可能绕过FMX.我使用XE5 / C但欢迎任何建议.目标操作系统是
Windows 7和
Windows 7. OS X.谢谢!
解决方法
如何在表单上放置一个TPaintBox来保存视频.在OnPaint方法中,您只需将下一帧绘制到paintBox画布.现在在表单上放置一个TTimer,将间隔设置为所需的帧速率.在计时器的OnTimer事件中,只需编写paintBox1.repaint
无论程序正在做什么,这都应该为您提供常规帧.
为了更加安全,您可以在OnTimer事件中增加帧编号.现在,在paintBox paint方法中,您可以知道要绘制哪个框架.这意味着如果其他东西调用了paint方法和定时器,你将不会跳帧 – 你最终会重新绘制相同的帧以进行额外的OnPaint调用.
我使用它来进行蚂蚁选择,尽管我更进一步使用覆盖的画布,因此我可以独立绘制选择和底层的绘图框画布,以便在选择更改时无需重新绘制主画布.这需要调用API,但我想你不需要它,除非你做的是透明色的视频.