【发布时间】:2012-08-05 22:37:02
【问题描述】:
我正在尝试使用 TImage 以 Firemonkey HD 形式显示动画 GIF,但我没有看到任何动画方法。
使用 Vcl.Imaging.gifImg 不是一种选择,因为类型不同。
有人可以提出解决此问题的方法或可能的组件在 Firemonkey 下为 GIF 图像设置动画吗?
我现在找到的唯一方法是:
创建 TGIFImage 实例并加载 GIF 图片
-
遍历 gif.images:
一个。将当前图像保存到流中
b. Image1.bitmap.loadFromStream [Image1 is FMX:TImage]
有没有更智能的解决方案?
【问题讨论】:
-
如果您要在后台线程中进行成像,那么解决方案可能不像您想象的那么愚蠢。即使 FMX 本身就拥有它 - 它仍然并且完全按照这种方式完成 - 通过后台线程的帧切换。 otl.17slon.com 可能会使线程更容易一些
-
你还可以查看 Vampyre Imaging 库,它声称 Mercurial 支持 FMX(但显然不支持 2009 年发布的版本)。但是,您可能仍会实现帧切换工作线程。但我不知道。
-
Arioch 'The:TTimer 不是比使用线程更好更容易的选择吗?它们都最终出现在应用程序的消息队列中。每个 GIF 一个线程也会消耗资源......
-
我不知道计时器是否会制作流畅的动画,但你肯定可以尝试一下。而且我不会使用中间流,而只是使用预先解包的位图数组
-
@Arioch,主要问题是位图。 iPath 在 FMX 环境中使用 VCL 类,
TBitmap或TCanvas等类不兼容。这就是使用流的原因;否则你可以直接使用TGIFImage或TGIFRenderer之类的类。TTimer对于动画来说已经足够了。如果您使用工作线程,那么您必须将 UI 与每个帧渲染同步,并且正如 iPath 正确所说的那样,将消息排入 UI 主线程的消息队列。甚至TGIFRenderer本身也使用计时器,而不是用于渲染循环的线程;-)
标签: delphi delphi-xe2 gif animated-gif firemonkey