GIF动画TImage / Timage32

问题描述 投票:2回答:1

目标是即使在调整其中一个图像组件之后,也可以在图像组件内部播放具有良好图像质量的动画GIF。

TImage示例

这是重新调整大小的TImage,非常糟糕的图像质量,但完美无瑕的动画:

timage example

// GIF = TGIFImage
// TImage = TImage
GIF.Animate := True;
TImage.Stretch := True;
TImage.Proportional := True;
TImage.Picture.Assign(GIF);

TImage32示例

这是来自graphics32库的重新调整大小的TImage32,非常好的图像质量但根本没有动画,只有第一帧可见:

graphics32 example

// GIF = TGIFImage
// TImage32 = TImage32
GIF.Animate := True;
TImage32.ScaleMode := smResize;
TImage32.BitmapAlign := baCenter;
TImage32.Bitmap.Assign(GIF);

我需要让TImage32组件播放动画,或者让TImage组件更好地重新采样。

delphi animation gif graphics32
1个回答
0
投票

Graphics32并不意味着开箱即可显示动画(如在GIF中)。此外,它不包含本机GIF解码器。您显示的代码依赖于Delphi的内部TPicture解码器。使用assign转换为TImage32只会复制第一帧,因此会产生静止图像。

要显示动画,您需要进一步的代码。正如评论中所提到的,首先将GIF的每个帧复制到TBitmap32实例(TImage32有太多开销)是有意义的。比你需要执行动画。如果可能,这应该与显示刷新率相关或至少考虑自上次绘制以来的时间间隔。

例如,如果您的显示器使用60fps,并且您的gif包含每秒30帧,则需要在两个刷新周期内显示每个帧。虽然,这将是一个简单的情况。

如果您的gif包含每秒29帧(例如),事情会变得稍微复杂一些。您需要开发一种算法来为当前时间选择正确的帧。

到目前为止,我还没有看到针对Graphics32的上述任何实现,但是一旦你知道该怎么做就不复杂了。

© www.soinside.com 2019 - 2024. All rights reserved.