日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF 一个性能比较好的 gif 解析库

發布時間:2023/12/14 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 解析库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。