我想将 ImageSource 的图像缓存到文件中,因此我可以使用 URI 指向它,但找不到执行此操作的调用。问题是我可以在网上找到的所有示例代码都是针对 WPF 的,并且使用的类在 WinRT 中不存在。
Windows.Graphics.Imaging 命名空间中有一些类,但据我通过搜索它们及其方法可以看出,它们都没有满足我的需要。
我有一个 ImageSource。我想将图像写入文件。我该怎么办?
我想将 ImageSource 的图像缓存到文件中,因此我可以使用 URI 指向它,但找不到执行此操作的调用。问题是我可以在网上找到的所有示例代码都是针对 WPF 的,并且使用的类在 WinRT 中不存在。
Windows.Graphics.Imaging 命名空间中有一些类,但据我通过搜索它们及其方法可以看出,它们都没有满足我的需要。
我有一个 ImageSource。我想将图像写入文件。我该怎么办?
ImageSource 属性通常是BitmapImage(在 XAML 中使用 URI 指定 ImageSource 时的默认值)。在某些情况下,您可能想要编辑位图的像素 - 这就是您将使用WriteableBitmap的地方。然后是SurfaceImageSource和VirtualSurfaceImageSource如果你想做 DirectX 互操作来绘制一些高质量、高性能的图形。
WinRT XAML Toolkit 是一个开源库,在 Imaging 命名空间中有一些扩展方法,可帮助您加载和保存图像。我没有看到一个允许您保存 BitmapImage 的方法,尽管您可以使用它的 UriSource 属性来找出图像的来源并从那里下载,但这听起来很浪费带宽,因为您需要下载两次。
我不确定您的确切情况是什么,但假设您正在从网上下载图像 - 您最好先下载它(例如使用Net.WebFile.SaveAsync()方法,然后基于它创建 BitmapImage . 另一方面,当您打开一个指定网址的 BitmapImage 时,图像应该会自动被缓存(例如,检查“%USERPROFILE%\AppData\Local\Packages\Microsoft.BingNews_8wekyb3d8bbwe\AC\INetCache\”以获取由“新闻”应用程序),因此也许最好只使用 Web URI 打开图像而不是自己管理缓存,这很重要。
您也可以使用 FFImageLoading ( https://github.com/molinch/FFImageLoading/ )。或者...查看它的来源以了解它是如何实现的。
这很简单:
<ff:FFImage Name="image"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
LoadingPlaceholder="loading.png"
ErrorPlaceholder="error.png"
CacheDuration="30"
RetryCount="3"
RetryDelay="250"
DownsampleHeight="300"
Source="http://lorempixel.com/output/city-q-c-600-600-5.jpg">
</ff:FFImage>
此处的示例项目:https ://github.com/molinch/FFImageLoading/tree/master/samples/Simple.WinPhone.Sample