目标是让动画GIF在图像组件中播放,即使在调整图像组件的大小之后也具有良好的图像质量。
TImage实例
这是调整大小的TImage,非常糟糕的图像质量,但完美的动画:

// GIF = TGIFImage
// TImage = TImage
GIF.Animate := True;
TImage.Stretch := True;
TImage.Proportional := True;
TImage.Picture.Assign(GIF);TImage32实例
这是从TImage32库中调整大小的graphics32,非常好的图像质量,但根本没有动画,只有第一个框架列表可见:

// GIF = TGIFImage
// TImage32 = TImage32
GIF.Animate := True;
TImage32.ScaleMode := smResize;
TImage32.BitmapAlign := baCenter;
TImage32.Bitmap.Assign(GIF);我需要让TImage32组件播放动画,或者让TImage组件有更好的重采样。
发布于 2018-03-22 15:59:55
Graphics32不是用来显示动画(比如在GIF中)的。此外,它不包含本机GIF解码器。您显示的代码依赖于德尔福的内部TPicture解码器。通过赋值到TImage32的转换只会复制第一个帧,因此它将产生一个静止的图像。
为了显示动画,您需要进一步的代码。正如注释中提到的,首先将GIF的每个帧复制到一个TBitmap32实例中是有意义的(TImage32有太多的开销)。而不是你需要的动画。如果可能的话,这应该与显示刷新率相关,或者考虑到自上次绘图以来的至少时间间隔。
例如,如果监视器使用60 for,而gif每秒包含30帧,则需要显示每帧两个刷新周期。不过,这将是一个很容易的情况。
如果你的gif包含每秒29帧(例如),事情会变得稍微复杂一些。您需要开发一个算法来为当前时间选择正确的框架。
到目前为止,我还没有看到上述Graphics32的任何实现,但是一旦您知道了该做什么,就不会那么复杂了。
https://stackoverflow.com/questions/49409964
复制相似问题