有没有人想出如何在 FireMonkey 应用程序中显示流畅的视频(即一系列位图),高清或 3D?在 VCL 中,您可以从线程写入画布,这将完美运行,但这在 FMX 中不起作用。更糟糕的是,显然唯一可靠的方法是使用 TImage,这似乎是从主线程更新的(打开菜单并暂时冻结视频)。我能找到的所有 EMB 示例要么从主线程写入 TImage,要么使用 Synchronize()。这些限制使 FMX 无法用于像样的视频显示,因此我正在寻找破解或可能绕过 FMX。我使用 XE5/C++,但欢迎任何建议。目标操作系统是 Windows 7+ 和 OS X。谢谢!
问问题
568 次
2 回答
0
如何在表单上放置一个 TPaintbox 来保存视频。在 OnPaint 方法中,您只需将下一帧绘制到颜料盒画布上。现在在表单上放一个 TTimer,将间隔设置为所需的帧速率。在计时器的 OnTimer 事件中,只需编写 paintbox1.repaint
无论程序在做什么,这都应该为您提供常规帧。
为了更加安全,您可以在 OnTimer 事件中增加一个帧号。现在在paintbox 绘制方法中,您知道要绘制哪一帧。这意味着如果其他东西调用paint方法以及计时器,您将不会跳帧 - 您最终将重新绘制相同的帧以额外调用 OnPaint。
尽管我更进一步并使用覆盖画布,但我将其用于行进蚂蚁选择,因此我可以独立绘制选择和底层画布画布,从而无需在选择更改时重新绘制主画布。这需要调用 API,但我猜你不需要它,除非你正在制作透明颜色的视频。
于 2014-02-21T12:29:42.623 回答
0
不幸的是,进一步的研究,包括与巡回开发者的一些谈话,清楚地表明,由于并发限制,FM 的设计使得所有 GPU 访问都通过主线程,因此绘画将始终受到限制。结果,我认为 FM 不适合我的需求,我正在重新评估我的选择。
于 2014-02-23T16:50:03.970 回答