本文介绍 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 解析库相关推荐

  1. c-ares 一个C语言的异步DNS解析库

    c-ares是一个C语言的异步DNS解析库,可以很方便的和使用者的事件循环统一起来,实现DNS的非 阻塞异步解析,libcurl, libevent, gevent, nodejs都在使用. 下面摘自 ...

  2. HTML解析库Gumbo简单使用记录

    目录 Gumbo简介 使用记录 1.GumboNode的类型 2.简单的使用 Gumbo简介 Gumbo是谷歌开源的一个纯C编写的HTML解析库,性能很好,就是用起来比较麻烦. github地址htt ...

  3. Epub文件解析库-- Epublib

    介绍 epublib是一个比较强大的Epub 文件解析库,同时也支持Epub文件的生成,本篇文章会对其做一个详细的介绍. 相关资料 项目地址 https://github.com/psiegman/e ...

  4. gson解析天气json_几种常用JSON解析库性能比较

    PS:公众号推文时间工作日早晨8点50分,周末下午3点30分,不见不散哈! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本篇通过JMH来测试一下Jav ...

  5. Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析

    Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...

  6. HTTP 请求之性能优化:DNS预解析 dns-prefetch

    HTTP 请求之性能优化:DNS预解析 dns-prefetch 当浏览器从第三方服务跨域请求资源的时候,在浏览器发起请求之前,这个第三方的跨域域名需要被解析为一个IP地址,这个过程就是DNS解析,D ...

  7. 跑分软件测试的游戏是,性能跑分 常规软件测试解析

    性能跑分 常规软件测试解析 性能跑分 常规软件测试 这一部分依旧是一些主流跑分软件的测试,看看这款产品的性能排行如何.驰为V88HD凭借瑞芯微RK3188的出色性能相信会有一个不错的结果.下面来看看几 ...

  8. [搬运工]移动游戏加载性能和内存管理全解析

    UWA 六月直播季 | 6.8 移动游戏加载性能和内存管理全解析 https://blog.uwa4d.com/archives/livebroadcast6-8.html 因为这篇文章没有提供PPT ...

  9. 网站性能优化之DNS预解析

    为何预解析能提高网站性能,不添加预解析网站性能差在哪里? 域名与IP 在访问网站的时候,我们都是通过输入域名进行访问,但是资源是存放在服务器上的,访问资源的唯一方式就是通过IP访问获取.域名是一个IP ...

最新文章

  1. 解决jre生成错误的问题
  2. Python3.6 安装 statsmodels
  3. Serverless Kubernetes 应用部署及扩缩容
  4. httplib 和 httplib2区别之 gzip解压
  5. Python开发【Part 11】:线程与进程
  6. ES6 WeakSet数据结构 与Set十分相似
  7. java实现颜色Color对象和16进制之间的转换
  8. python十条建议_十条建议帮你提高Python编程效率
  9. GitHub下载代码方法
  10. 计算机应用教程第9,计算机应用教程(第8版)第六章
  11. php 回调cache 方案,基于PHP的一种Cache回调与自动触发技术
  12. 【OS】单道程序设计VS多道程序设计
  13. 背下这148句话,你可以提高一个档次了,不止在文学方面
  14. Python办公自动化之Excel报表自动化,看这一篇就够了!
  15. 冒泡排序和插入排序傻傻分不清
  16. 写给二线城市【Python工程师】的成长指南
  17. 六月开发语言排行榜出炉
  18. 做一个成功的软件项目经理
  19. python在txt文件末尾追加写入_在Python文件末尾添加什么?
  20. cyt の heart

热门文章

  1. Htmlayout早期的一个摸索作品
  2. 2018年区块链十大发展势头
  3. win2003 IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAd
  4. 主要的数据仓库开发软件及软件功能比较
  5. SAP重置公司代码资产会计(FI-AA)数据-OABL
  6. 标签体系-内容建设思路
  7. ubuntu qt编译mysql报错_[Linux]QT编译Mysql驱动(Mariadb驱动),解决qmake报错问题
  8. 强弩之末,刘强东草根创业恐难迎圆满结局?
  9. 服务器终端输出,服务器与终端数据交互程序
  10. 卡夫卡详解_卡夫卡概念