【问题标题】:How to set the speed of an animated gif in .Net using the GifBitmapEncoder class如何使用 GifBitmapEncoder 类在 .Net 中设置动画 gif 的速度
【发布时间】:2015-10-08 16:27:45
【问题描述】:

我使用了how to create an animated gif in .net答案中的示例代码

即

System.Windows.Media.Imaging.GifBitmapEncoder gEnc = new GifBitmapEncoder();

foreach (System.Drawing.Bitmap bmpImage in images)
{
    var src = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
        bmpImage.GetHbitmap(),
        IntPtr.Zero,
        Int32Rect.Empty,
        BitmapSizeOptions.FromEmptyOptions());
    gEnc.Frames.Add(BitmapFrame.Create(src));
}
using(FileStream fs = new FileStream(path, FileMode.Create))
{
    gEnc.Save(fs);
}

我现在想设置动画 gif 的速度。这方面的帮助是可怕的。有人知道怎么做吗?这肯定是可能的。这似乎是动画 gif 的一个基本功能,但他们似乎已经竭尽全力让它变得困难。

提前致谢。

【问题讨论】:

标签: c# .net animated-gif


【解决方案1】:

我认为你不能用GifBitmapEncoder 做到这一点。理论上,您可以使用BitmapMetadata.SetQuery 在每一帧上设置/grctlext/Delay 的值(延迟在每一帧的图形控制扩展中指定,如the Wikipedia article 中所述)。但是文档说:

图形交换格式 (GIF) 图像不支持全局 预览、全局缩略图、全局元数据、帧级缩略图、 或帧级元数据。

这在技术上是不正确的,因为 GIF 格式本身确实支持全局和帧级元数据;只是 GifBitmapEncoder 类不支持它。

所以我认为您唯一的选择是使用另一个更完整的图像处理库,或者手动进行。 GIF 格式相当简单;这个site有详细的描述,包括动画和LZW压缩的部分。

或者,您可以使用GifBitmapEncoder 来完成繁重的工作,而不是自己进行整个编码,然后只需在结果流中修补元数据。我的XamlAnimatedGif 库中的代码可能会有所帮助;您将无法直接使用它,但您可以重复使用它的某些部分,因为它实现了一个完整的 GIF 解码器。

【讨论】:

    猜你喜欢
    • 2013-09-14
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2017-12-25
    • 2020-01-19
    • 1970-01-01
    • 2010-11-14
    相关资源
    最近更新 更多