UWP如何保存网络图片,Image控件到文件?
1、第一种方法是RenderTargetBitmap的方式。
由于Image控件的Source属性可以有BitmapImage或者WriteableBitmap,WriteableBitmap便于保存,而BitmapImage无法直接保存。
这种方法就是用于BitmapImage的图像保存的。
首先是创建文件。使用如图代码,获取Bitmap的UriSource.AbsoluteUri,根据Uri生成文件名。

2、然后,创建一个新的RenderTargetBitmap。RenderTargetBitmap实际上是获取的这个控件渲染的结果。调用RenderAsync获取渲染结果。
接着从RenderTargetBitmap得到像素缓存IBuffer,然后就可以使用IRandomAccessStream和BitmapEncoder编码写入文件了。

3、最终效果如图。这样做的问题在于,得到的图片尺寸并非图片真实尺寸,而是控件的渲染尺寸。

1、第二种方法,是使用WriteableBitmap。前面也说过,BitmapImage和WriteableBitmap都可以作为Image的Source。
虽然Image控件设置Source就可以帮我们下载图片,但是保存却不尽人意。
所以,使用WriteableBitmap自己实现图片下载,有更多的控制权。
如下是一个下载图片,得到WriteableBitmap的函数。

2、WriteableBitmap可以作为Image控件的Source,如图代码设置Image控件的Source。

3、使用如图代码保存WriteableBitmap到文件。
WriteableBitmap可以直接获取PixelBuffer属性,使用ToArray()转变为Byte[],然后用BitmapEncoder编码到文件。

4、最终效果如图所示。可以看到保存到文件是图片真实宽度和高度。
