GIF动画TImage / Timage32
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GIF动画TImage / Timage32相关的知识,希望对你有一定的参考价值。
目标是即使在调整其中一个图像组件之后,也可以在图像组件内部播放具有良好图像质量的动画GIF。
TImage示例
这是重新调整大小的TImage
,非常糟糕的图像质量,但完美无瑕的动画:
// GIF = TGIFImage
// TImage = TImage
GIF.Animate := True;
TImage.Stretch := True;
TImage.Proportional := True;
TImage.Picture.Assign(GIF);
TImage32示例
这是来自graphics32库的重新调整大小的TImage32
,非常好的图像质量但根本没有动画,只有第一帧可见:
// GIF = TGIFImage
// TImage32 = TImage32
GIF.Animate := True;
TImage32.ScaleMode := smResize;
TImage32.BitmapAlign := baCenter;
TImage32.Bitmap.Assign(GIF);
我需要让TImage32
组件播放动画,或者让TImage
组件更好地重新采样。
答案
Graphics32并不意味着开箱即可显示动画(如在GIF中)。此外,它不包含本机GIF解码器。您显示的代码依赖于Delphi的内部TPicture解码器。使用assign转换为TImage32只会复制第一帧,因此会产生静止图像。
要显示动画,您需要进一步的代码。正如评论中所提到的,首先将GIF的每个帧复制到TBitmap32实例(TImage32有太多开销)是有意义的。比你需要执行动画。如果可能,这应该与显示刷新率相关或至少考虑自上次绘制以来的时间间隔。
例如,如果您的显示器使用60fps,并且您的gif包含每秒30帧,则需要在两个刷新周期内显示每个帧。虽然,这将是一个简单的情况。
如果您的gif包含每秒29帧(例如),事情会变得稍微复杂一些。您需要开发一种算法来为当前时间选择正确的帧。
到目前为止,我还没有看到针对Graphics32的上述任何实现,但是一旦你知道该怎么做就不复杂了。
以上是关于GIF动画TImage / Timage32的主要内容,如果未能解决你的问题,请参考以下文章