Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi Firemonkey中的动画GIF_Delphi_Delphi Xe2_Gif_Animated Gif_Firemonkey - Fatal编程技术网

Delphi Firemonkey中的动画GIF

Delphi Firemonkey中的动画GIF,delphi,delphi-xe2,gif,animated-gif,firemonkey,Delphi,Delphi Xe2,Gif,Animated Gif,Firemonkey,我正在尝试使用TImage以Firemonkey HD格式显示动画GIF,但我没有看到任何动画方法 使用Vcl.Imaging.gifImg不是一个选项,因为类型不同 有人能建议一种方法来解决这个问题,或者可能是在Firemonkey下制作GIF图像动画的组件吗 目前我唯一能找到的方法是: 创建TGIFImage实例并加载GIF图像 循环浏览gif.com图像: a。将当前图像保存到流 b。Image1.bitmap.loadFromStream[Image1是FMX:TImage] 有更智能的

我正在尝试使用TImage以Firemonkey HD格式显示动画GIF,但我没有看到任何动画方法

使用Vcl.Imaging.gifImg不是一个选项,因为类型不同

有人能建议一种方法来解决这个问题,或者可能是在Firemonkey下制作GIF图像动画的组件吗

目前我唯一能找到的方法是:

  • 创建TGIFImage实例并加载GIF图像

  • 循环浏览gif.com图像:

    a。将当前图像保存到流

    b。Image1.bitmap.loadFromStream[Image1是FMX:TImage]


  • 有更智能的解决方案吗?

    您可以使用TBitmapListAnimation与单个图像一起使用,该图像的每个动画帧都位于一个长条中。例如,如果你的动画有4帧,并且是32px乘32px,那么你需要创建一个宽128px高32px的图像,并并排添加每一帧

    然后在表单中添加一个TImage(不必将位图加载到此表单中)

    添加一个TBitmapListAnimation,将TImage作为其父级

    双击动画位图并加载动画图像条

    下拉属性名称并选择位图

    对于本例,将AnimationCount设置为4和AnimationRowCount1

    将enabled设置为true

    TBitmapListAnimation可以很好地控制动画帧速率、反转、循环和插值。我找不到一种在FireMonkey2中制作.gif动画的方法,但如果你有办法将动画.gif转换成“卡通长条”,那么这是制作动画的好方法


    PS这是Delphi XE3…所以不能说以前的版本中是否存在这些组件。

    如果你想在后台线程中进行成像,那么解决方案可能不会像你想象的那样愚蠢。即使FMX本机拥有它——它仍然是这样做的——通过背景线程的帧切换。otl.17slon.com可能会使线程变得更容易。你也可以看看Vampyre Imaging library,它支持Mercurial中的FMX(但显然不是在2009年发布的版本中)。不过,您可能仍然会实现帧切换工作线程。但我不知道。阿里奇:TTimer不是比使用线程更好更容易的选择吗?它们最终都会出现在应用程序的消息队列中。另外,每个GIF一个线程将消耗资源…我不知道计时器是否可以制作平滑的动画,但你肯定可以试试。我不使用中间流,而是使用预解包的bitmaps@Arioch,主要问题是位图。iPath正在FMX环境中使用VCL类,而
    TBitmap
    TCanvas
    等类不兼容。这就是流使用的原因;否则,您可以直接使用
    tgifmage
    TGIFRenderer
    之类的类。而且
    TTimer
    对于动画来说已经足够了。如果使用工作线程,则必须将UI与每个帧渲染同步,正如iPath正确地说的那样,这将使消息排队到UI主线程的消息队列中。甚至
    TGIFRenderer
    本身也使用计时器,而不是用于渲染循环的线程;-)我相信这就是XE3中的
    TAniIndicator
    的工作原理。“卡通漫画”的正确术语应该是精灵或精灵列表