title author date CreateTime categories
WPF 播放 gif
lindexi
2018-08-10 19:16:53 +0800
2018-2-13 17:23:3 +0800
WPF gif

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

MediaElement 方法

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

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

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 ,可以直接复制这个类到工程使用。下面代码可以用在正式项目中。

<script src=" https://gist.github.com/lindexi/7c6d70c821fcb72f487812e58c564442.js"></script>

项目下载: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几乎都不需要。

 

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