本文告诉大家如何在 WPF 播放 Gif 图片,提供了几个方法进行播放,包括比较性能。

MediaElement 方法

这是比较不推荐的方法,但是使用简单

<MediaElement x:Name="GifMedia"  Source="x.gif" UnloadedBehavior="Manual"  LoadedBehavior="Play" />

参见:WPF使用MediaElement显示gif图片 - CSDN博客

GifBitmapDecoder 方法

使用 GifBitmapDecoder 能用上 WIC 层系统解码,能支持很多奇怪的格式,以下是我实现的版本,我实现的版本只能播放简单的全画的 GIF 图片

WPF 通过 GifBitmapDecoder 调用 WIC 解析 Gif 和进行动画播放的简单方法

Magick 方法

这个方法请参见博客 WPF 一个性能比较好的 gif 解析库

WinForm 的方法

使用

本文提供的类,可以直接在 Xaml 使用或者在 cs 使用,可以控制开始播放和停止。

在播放的过程中,使用很少的内存。在使用到一定的时间,会自动释放内存。而且比我现在项目使用的播放的 CPU 要少很多,我自己写的 gif 播放需要使用 3% 左右的 CPU,下面这个类使用的 CPU 只有 1% 。当然我的 gif 解析使用的内存会比下面的代码少,不然我就不敢把下面的代码开源了

在 xaml 使用的方法:

            <local:GifImageControl x:Name="Image" Path="2017年3月23日 115958.gif"></local:GifImageControl>

在添加进之后就会自动开始播放

如果需要在后台代码添加,那么可以使用下面代码

        <Grid x:Name="HlosqrrsDnqxv">
        </Grid>

            var image = new GifImageControl("2017年3月23日 115958.gif");
            HlosqrrsDnqxv.Children.Add(image);

因为代码很简单,所以需要其他的功能,请看源代码

源码

代码放在 github ,可以直接复制这个类到工程使用。下面代码可以用在正式项目中。

项目下载:WPF 使用 WinForm 播放 gif

如果在运行项目出现 异常,那么请把 DeleteObject 方法修改为下面的代码

        [DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool DeleteObject(IntPtr hObject);

打开 .sln 文件,然后按 F5 运行,可以看到占用内存在 120M ,在运行一定时间,回收内存,占用内存70M,而CPU几乎都不需要。

参见:http://hi.baidu.com/mych/blog/item/1eb14f545f12a752564e00be.html

WPF播放GIF控件完整代码 - CSDN博客

如果在运行出现任何问题,请告诉我,上面这个方法不保证可以解决任何的gif图片。


本文会经常更新,请阅读原文: https://blog.lindexi.com/post/WPF-%E6%92%AD%E6%94%BE-gif.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者收藏我的博客导航

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

微软最具价值专家


无盈利,不卖课,做纯粹的技术博客

以下是广告时间

推荐关注 Edi.Wang 的公众号

欢迎进入 Eleven 老师组建的 .NET 社区

以上广告全是友情推广,无盈利