UWP:从 'get; & set;' 中的 FilePath 设置 image.source
UWP: Setting the image.source from FilePath in the 'get; & set;'
集合中的每个图像都有一个序列化的文件路径。加载集合时,我需要从文件路径加载图像。下面的代码将不起作用,因为 IsolatedStorageFileStream 与用于 image.SetSource() 的 IRandomAccessStream 不兼容。
public BitmapImage Image
{
get
{
var image = new BitmapImage();
if (FilePath == null) return null;
IsolatedStorageFileStream stream = new IsolatedStorageFileStream(FilePath, FileMode.Open, FileAccess.Read, IsolatedStorageFile.GetUserStoreForApplication());
image.SetSource(stream);
return image;
}
}
是否有替代代码来完成此操作?
您可以简单地使用 WindowsRuntimeStreamExtensions.AsRandomAccessStream 扩展方法:
using System.IO;
...
using (var stream = new IsolatedStorageFileStream(
FilePath, FileMode.Open, FileAccess.Read,
IsolatedStorageFile.GetUserStoreForApplication()))
{
await image.SetSourceAsync(stream.AsRandomAccessStream());
}
当我测试这个 SetSource
时阻止了应用程序,所以我使用了 SetSourceAsync
。
您或许也可以像这样直接访问独立存储文件夹:
var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
FilePath, CreationCollisionOption.OpenIfExists);
using (var stream = await file.OpenReadAsync())
{
await image.SetSourceAsync(stream);
}
集合中的每个图像都有一个序列化的文件路径。加载集合时,我需要从文件路径加载图像。下面的代码将不起作用,因为 IsolatedStorageFileStream 与用于 image.SetSource() 的 IRandomAccessStream 不兼容。
public BitmapImage Image
{
get
{
var image = new BitmapImage();
if (FilePath == null) return null;
IsolatedStorageFileStream stream = new IsolatedStorageFileStream(FilePath, FileMode.Open, FileAccess.Read, IsolatedStorageFile.GetUserStoreForApplication());
image.SetSource(stream);
return image;
}
}
是否有替代代码来完成此操作?
您可以简单地使用 WindowsRuntimeStreamExtensions.AsRandomAccessStream 扩展方法:
using System.IO;
...
using (var stream = new IsolatedStorageFileStream(
FilePath, FileMode.Open, FileAccess.Read,
IsolatedStorageFile.GetUserStoreForApplication()))
{
await image.SetSourceAsync(stream.AsRandomAccessStream());
}
当我测试这个 SetSource
时阻止了应用程序,所以我使用了 SetSourceAsync
。
您或许也可以像这样直接访问独立存储文件夹:
var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
FilePath, CreationCollisionOption.OpenIfExists);
using (var stream = await file.OpenReadAsync())
{
await image.SetSourceAsync(stream);
}