1

我想将 ImageSource 的图像缓存到文件中,因此我可以使用 URI 指向它,但找不到执行此操作的调用。问题是我可以在网上找到的所有示例代码都是针对 WPF 的,并且使用的类在 WinRT 中不存在。

Windows.Graphics.Imaging 命名空间中有一些类,但据我通过搜索它们及其方法可以看出,它们都没有满足我的需要。

我有一个 ImageSource。我想将图像写入文件。我该怎么办?

4

2 回答 2

0

ImageSource 属性通常是BitmapImage(在 XAML 中使用 URI 指定 ImageSource 时的默认值)。在某些情况下,您可能想要编辑位图的像素 - 这就是您将使用WriteableBitmap的地方。然后是SurfaceImageSourceVirtualSurfaceImageSource如果你想做 DirectX 互操作来绘制一些高质量、高性能的图形。

WinRT XAML Toolkit 是一个开源库,在 Imaging 命名空间中有一些扩展方法,可帮助您加载和保存图像。我没有看到一个允许您保存 BitmapImage 的方法,尽管您可以使用它的 UriSource 属性来找出图像的来源并从那里下载,但这听起来很浪费带宽,因为您需要下载两次。

我不确定您的确切情况是什么,但假设您正在从网上下载图像 - 您最好先下载它(例如使用Net.WebFile.SaveAsync()方法,然后基于它创建 BitmapImage . 另一方面,当您打开一个指定网址的 BitmapImage 时,图像应该会自动被缓存(例如,检查“%USERPROFILE%\AppData\Local\Packages\Microsoft.BingNews_8wekyb3d8bbwe\AC\INetCache\”以获取由“新闻”应用程序),因此也许最好只使用 Web URI 打开图像而不是自己管理缓存,这很重要。

于 2012-10-19T19:18:30.570 回答
0

您也可以使用 FFImageLoading ( https://github.com/molinch/FFImageLoading/ )。或者...查看它的来源以了解它是如何实现的。

特征

  • Xamarin.iOS(最低 iOS 7)、Xamarin.Android(最低 Android 4)、Xamarin.Forms 和 Windows(WinRT、UWP)支持
  • 可配置的磁盘和内存缓存
  • 类似下载/加载请求的重复数据删除
  • 错误和加载占位符支持
  • 图像可以自动下采样到指定大小(更少的内存使用)
  • WebP 支持
  • 图像加载淡入动画支持
  • 可以重试图片下载(RetryCount、RetryDelay)
  • 默认情况下禁用 Android 透明度(可配置)。节省 50% 的内存
  • 转换支持
    • 模糊变换
    • CircleTransformation、RoundedTransformation、CornersTransformation
    • 颜色空间变换、灰度变换、棕褐色变换
    • 翻转变换
    • 支持自定义转换(本机平台 ITransformation 实现)

这很简单:

<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

于 2015-11-24T17:17:47.210 回答