- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
有没有人知道如何在 FireMonkey 应用程序中显示流畅的视频(即一系列位图),HD 或 3D?在 VCL 中,您可以从线程写入 Canvas ,这可以完美地工作,但这在 FMX 中不起作用。更糟糕的是,显然唯一可靠的方法是使用 TImage,这似乎是从主线程更新的(打开菜单和视频暂时卡住)。我能找到的所有 EMB 示例都要么从主线程写入 TImage,要么使用 Synchronize()。这些限制使 FMX 无法用于像样的视频显示,因此我正在寻找破解或可能绕过 FMX 的方法。我使用 XE5/C++,但欢迎任何建议。目标操作系统是 Windows 7+ 和 OS X。谢谢!
最佳答案
如何在您的窗体上放置一个 TPaintbox 来保存视频。在 OnPaint 方法中,您只需将下一帧绘制到 paintbox Canvas 上。现在在窗体上放置一个 TTimer,将间隔设置为所需的帧速率。在计时器的 OnTimer 事件中,只需编写 paintbox1.repaint
无论程序在做什么,这都应该为您提供常规帧。
为了更加安全,您可以在 OnTimer 事件中增加一个帧数。现在在 paintbox paint 方法中你知道要绘制哪一帧。这意味着如果其他东西调用了 paint 方法和计时器,您将不会跳帧 - 您最终只会为额外调用 OnPaint 重新绘制同一帧。
尽管我更进一步并使用覆盖 Canvas ,但我将其用于行进 Ant 选择,因此我可以独立绘制到选择和底层 Canvas 盒 Canvas ,从而无需在选择更改时重新绘制主 Canvas 。这需要调用 API,但我想你不需要它,除非你正在制作透明颜色的视频。
关于c++ - 如何在FireMonkey(FMX、FM3)中显示流畅的视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21784315/
我是一名优秀的程序员,十分优秀!