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" />
参见:WPF使用MediaElement显示gif图片 - CSDN博客
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>如果在运行项目出现 异常,那么请把 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
如果在运行出现任何问题,请告诉我,上面这个方法不保证可以解决任何的gif图片。