WPF 一个性能比较好的 gif 解析库
本文介绍 Magick.NET ,这是 ImageMagick 的 .Net 封装,他支持 100 多种格式的图片,而 gif 也是他支持的。本文告诉大家如何使用这个库播放 gif 图
先给大家看一下播放下面这个图片需要的内存。
这个库的好处是可以在解析的时候使用比较多的内存,解析完成就不需要那么多的内存。而其他的库解析或播放都需要很多内存。从上面的图看到,解析图片需要使用800M内存,解析完成需要200M内存,有很多资源都被释放。
下面告诉大家如何使用这个库。
使用 Nuget 搜索 Magick.NET 就可以找到。如果看到了很多版本,不要害怕。这个库需要说明是哪个版本,其中Qn就是表示质量,推荐使用Q8,而这个库需要指定cpu,于是就可以找到需要的库。
使用Nuget安装之后就可以使用,例如需要播放 E:\temp\2017年9月1日 16.gif
那么需要写一个Image控件和在后台写很少代码。
<Image x:Name="G"></Image>
后台需要使用collection = new MagickImageCollection(str)
获得文件,然后使用ToBitmapSource
获得图片。使用之前需要给缓存文件夹MagickAnyCPU.CacheDirectory = "E:\\temp";
string str = "E:\\temp\\2017年9月1日 16.gif";var image = new List<BitmapSource>();using (collection = new MagickImageCollection(str)){collection.Coalesce();foreach (var magickImage in collection){image.Add(magickImage.ToBitmapSource());}}
接下来就是播放图片,使用一个循环播放
Task.Run(async () =>{while (true){await Dispatcher.InvokeAsync(() =>{G.Source = image[n];});n++;if (n == image.Count){n = 0;}await Task.Delay(100);}});
运行就可以看到,播放图片。就是上面的截图。但是程序有小问题,就是没有拿到图片播放间隔,这个可以通过 magickImage.AnimationDelay
拿到,这个数是 1/100 秒,所以一般使用 *10
结果是毫秒 。
一般在使用ToBitmapSource
需要使用AdaptiveResize
这个方法可以让gif显示播放的图片大小,使用这个函数可以获得比较少的内存。
于是播放 gif 的代码很简单,打开 gif ,解析,播放。
string str = "E:\\temp\\2017年9月1日 16.gif";var image = new List<(BitmapSource image,int delay)>();using (collection = new MagickImageCollection(str)){collection.Coalesce();foreach (var magickImage in collection){magickImage.AdaptiveResize(100,100);image.Add((magickImage.ToBitmapSource(), magickImage.AnimationDelay * 10));}}Task.Run(async () =>{while (true){await Dispatcher.InvokeAsync(() =>{G.Source = image[n].image;});n++;if (n == image.Count){n = 0;}await Task.Delay(image[n].delay);}});
我把最近写的 gif 使用方法写到一个博客,欢迎大家来看这个博客 WPF 播放 gif
参见:水印第三版 ~ 变态水印(这次用Magick.NET来实现,附需求分析和源码) - 毒逆天 - 博客园
https://github.com/dlemstra/Magick.NET
其他解析gif 的方法:【续】WPF支持GIF的各种方法 - CSDN博客
WPF 如何显示gif - CSDN博客
WPF播放GIF控件完整代码 - CSDN博客
WPF中显示GIF图片 - CSDN博客
我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新
如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
WPF 一个性能比较好的 gif 解析库相关推荐
- c-ares 一个C语言的异步DNS解析库
c-ares是一个C语言的异步DNS解析库,可以很方便的和使用者的事件循环统一起来,实现DNS的非 阻塞异步解析,libcurl, libevent, gevent, nodejs都在使用. 下面摘自 ...
- HTML解析库Gumbo简单使用记录
目录 Gumbo简介 使用记录 1.GumboNode的类型 2.简单的使用 Gumbo简介 Gumbo是谷歌开源的一个纯C编写的HTML解析库,性能很好,就是用起来比较麻烦. github地址htt ...
- Epub文件解析库-- Epublib
介绍 epublib是一个比较强大的Epub 文件解析库,同时也支持Epub文件的生成,本篇文章会对其做一个详细的介绍. 相关资料 项目地址 https://github.com/psiegman/e ...
- gson解析天气json_几种常用JSON解析库性能比较
PS:公众号推文时间工作日早晨8点50分,周末下午3点30分,不见不散哈! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本篇通过JMH来测试一下Jav ...
- Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析
Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...
- HTTP 请求之性能优化:DNS预解析 dns-prefetch
HTTP 请求之性能优化:DNS预解析 dns-prefetch 当浏览器从第三方服务跨域请求资源的时候,在浏览器发起请求之前,这个第三方的跨域域名需要被解析为一个IP地址,这个过程就是DNS解析,D ...
- 跑分软件测试的游戏是,性能跑分 常规软件测试解析
性能跑分 常规软件测试解析 性能跑分 常规软件测试 这一部分依旧是一些主流跑分软件的测试,看看这款产品的性能排行如何.驰为V88HD凭借瑞芯微RK3188的出色性能相信会有一个不错的结果.下面来看看几 ...
- [搬运工]移动游戏加载性能和内存管理全解析
UWA 六月直播季 | 6.8 移动游戏加载性能和内存管理全解析 https://blog.uwa4d.com/archives/livebroadcast6-8.html 因为这篇文章没有提供PPT ...
- 网站性能优化之DNS预解析
为何预解析能提高网站性能,不添加预解析网站性能差在哪里? 域名与IP 在访问网站的时候,我们都是通过输入域名进行访问,但是资源是存放在服务器上的,访问资源的唯一方式就是通过IP访问获取.域名是一个IP ...
最新文章
- 解决jre生成错误的问题
- Python3.6 安装 statsmodels
- Serverless Kubernetes 应用部署及扩缩容
- httplib 和 httplib2区别之 gzip解压
- Python开发【Part 11】:线程与进程
- ES6 WeakSet数据结构 与Set十分相似
- java实现颜色Color对象和16进制之间的转换
- python十条建议_十条建议帮你提高Python编程效率
- GitHub下载代码方法
- 计算机应用教程第9,计算机应用教程(第8版)第六章
- php 回调cache 方案,基于PHP的一种Cache回调与自动触发技术
- 【OS】单道程序设计VS多道程序设计
- 背下这148句话,你可以提高一个档次了,不止在文学方面
- Python办公自动化之Excel报表自动化,看这一篇就够了!
- 冒泡排序和插入排序傻傻分不清
- 写给二线城市【Python工程师】的成长指南
- 六月开发语言排行榜出炉
- 做一个成功的软件项目经理
- python在txt文件末尾追加写入_在Python文件末尾添加什么?
- cyt の heart
热门文章
- Htmlayout早期的一个摸索作品
- 2018年区块链十大发展势头
- win2003 IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAd
- 主要的数据仓库开发软件及软件功能比较
- SAP重置公司代码资产会计(FI-AA)数据-OABL
- 标签体系-内容建设思路
- ubuntu qt编译mysql报错_[Linux]QT编译Mysql驱动(Mariadb驱动),解决qmake报错问题
- 强弩之末,刘强东草根创业恐难迎圆满结局?
- 服务器终端输出,服务器与终端数据交互程序
- 卡夫卡详解_卡夫卡概念