转载自,谢谢原内容 http://www.raysoftware.cn/?p=559#comment-3192
用FireMonkey的同学们一定知道FireMonkey对GIF动画的支持不是太好,只有静态的。
网上已有的解决方案就是先手动预处理GIF文件分割成多个单张,然后放到BitmapList中,缺点是要手动处理,而且帧速率也麻烦。因为项目中要实现了一个GIF的格式处理,代码整理了一下,嫁接到FireMonkey中,给广大兄弟们使用。
主要是就实现一个GIF格式的Reader,把GIF每一帧解析出来变成TBitmap,帧速率读出来,按照指定的帧速率播放。
之前用GDIPlus写了一份,但是有两个原因促使我自己重头写。
1)GDIPlus不能跨平台只支持Windows,
2)效率偏低。也用FreeImage试过,FreeImage对静态图还可以,获取GIF帧极其慢,40毫秒解析出一帧,几百帧要等死人的。改GDIPlus好一些,但是也慢。我自己解析GIF的话,比GDIPlus的快接近一倍。GDIPlus解析要900-1000ms,这个只要500ms
因为这份代码是直接自己解析GIF文件格式的,理论上可以跨任何Delphi支持的平台。
自己测试Win32,Win64,Android,FMX for Linux 0.91无问题。
代码和例子:FMXGif
控件部分的代码如下:
|