有时候我们的网络很垃圾,我的的UWP要在第一次打开网络图片,就把图片存放到本地,下次可以从本地打开。
有时候用户使用的是流量网络,不能每次都联网下载。
我们不得在应用存放用户打开的图片。
这就是先把图片下载,然后显示出来,存放到本地,接着下次要使用就可以从本地获取。
最好这个和我们用户是透明,我们不知道图片在哪,是本地还是网络,只要给一个Uri就有一个图片。
这里图片我用BitmapImage,Uri是输入网络的
下载图片
图片也是和其他一样,我们可以简单用系统给的网络web下载。
我们需要输入Uri,然后把图片下载。
图片要显示,需要SetSourceAsync,他需要的参数IRandomAccessStream,而这个需要Buffer写数据,不能用byte,我开始用的System.Net.Http
没有获取Buffer方法,于是我查了垃圾wr,最后用Windows.Web.Http
先获取图片
StorageImageFolder就是保存图片
保存图片
我们需要知道一个Uri就可以拿到一个图片,但是Uri不能做文件名,于是我用md5
Uwp使用Md5,可以去看我写的文章
我们的图片存放在本地,最后放在ApplicationData.Current.LocalCacheFolder
在存放文件,RandomAccessStream需要转byte[]
存放文件
从本地打开
把Uri转为图片名,打开本地文件
所有代码
第一次使用图片从网络打开,第二次就可以放在本地,不使用网络。
先搜索本地,本地存在就打开,不存在只好从网络打开
函数使用就是ImageStorage.GetImage(uri);
Nuget安装
Nuget搜索lindexi.uwp.src.ImageStorage
命令行
当前图片缓存的功能已经合并到 Microsoft.Toolkit.Uwp 工具,不过里面已经看不到我写的代码了,所以变得更加好用
在最低版本为 16299 之后可以通过 nuget 找到 Microsoft.Toolkit.Uwp 安装,然后可以使用下面的代码判断如果图片已经保存在本地,就从本地读取图片。如果图片没有保存到本地,就从网络下载
ImageCache
原文链接: http://blog.lindexi.com/post/win10-uwp-%E5%AD%98%E6%94%BE%E7%BD%91%E7%BB%9C%E5%9B%BE%E7%89%87%E5%88%B0%E6%9C%AC%E5%9C%B0
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 林德熙 (包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我 联系。