首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GIF动画TImage/TImage 32

GIF动画TImage/TImage 32
EN

Stack Overflow用户
提问于 2018-03-21 15:10:08
回答 1查看 1.3K关注 0票数 2

目标是让动画GIF在图像组件中播放,即使在调整图像组件的大小之后也具有良好的图像质量。

TImage实例

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

代码语言:javascript
复制
// GIF = TGIFImage
// TImage = TImage
GIF.Animate := True;
TImage.Stretch := True;
TImage.Proportional := True;
TImage.Picture.Assign(GIF);

TImage32实例

这是从TImage32库中调整大小的graphics32,非常好的图像质量,但根本没有动画,只有第一个框架列表可见:

代码语言:javascript
复制
// GIF = TGIFImage
// TImage32 = TImage32
GIF.Animate := True;
TImage32.ScaleMode := smResize;
TImage32.BitmapAlign := baCenter;
TImage32.Bitmap.Assign(GIF);

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-22 15:59:55

Graphics32不是用来显示动画(比如在GIF中)的。此外,它不包含本机GIF解码器。您显示的代码依赖于德尔福的内部TPicture解码器。通过赋值到TImage32的转换只会复制第一个帧,因此它将产生一个静止的图像。

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

例如,如果监视器使用60 for,而gif每秒包含30帧,则需要显示每帧两个刷新周期。不过,这将是一个很容易的情况。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49409964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档