保存使用 FileOpenPicker 选取的图像
Save image picked with FileOpenPicker
我想创建一个应用程序,用户可以在其中 select 本地照片存储中的多张图片,我想将这些照片加载到应用程序中。用户每次打开应用程序时都必须能够找到它们。我使用 FileOpenPicker
让用户 select 使用 PickMultipleFilesAsync() 方法处理照片。现在我不知道如何保存照片以便用户下次打开应用时显示给他们。
这是我的代码:
private async void AddButton_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add(".jpg");
openPicker.FileTypeFilter.Add(".jpeg");
openPicker.FileTypeFilter.Add(".bmp");
openPicker.FileTypeFilter.Add(".png");
IReadOnlyList<StorageFile> files = await openPicker.PickMultipleFilesAsync();
if (files.Count > 0)
{
foreach (StorageFile file in files)
{
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.DecodePixelHeight = 332;
bitmapImage.DecodePixelWidth = 200;
IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read);
await bitmapImage.SetSourceAsync(stream);
Wallpapers.Add(bitmapImage);
stream.Dispose();
}
}
}
谢谢大家
如果我对你的问题的理解正确,你想记住照片的保存位置(或照片的复制来源——并不重要)。您必须使用设置服务。
您可以使用 Windows.Storage.ApplicationData.Current.LocalSettings.Values
设置字典保存文件路径等信息以供日后调用。
例如:
Windows.Storage.ApplicationData.Current.LocalSettings.Values["PhotosPath"] = file.Path;
其中文件是代码中显示的 StorageFile 对象,下次检索时 Windows.Storage.ApplicationData.Current.LocalSettings.Values["PhotosPath"]
使用 Path 初始化文件对象。
您可以通过声明 using Windows.Storage;
命名空间(我认为您已经为 StorageFile 做了)来缩短上面的代码行,然后只使用
ApplicationData.Current.LocalSettings.Values["PhotosPath"]
部分在您的代码中。
进一步的建议: 如果您在项目中使用 T10 Template,您不会想直接使用 Windows.Storage.ApplicationData.Current.LocalSettings.Values 进行设置。 T10 在 Minimal Template 中的 Windows.Storage.ApplicationData.Current 上有一个更全面的设置服务(与备选的 Blank Template 相对),这就是你想改用。
我想创建一个应用程序,用户可以在其中 select 本地照片存储中的多张图片,我想将这些照片加载到应用程序中。用户每次打开应用程序时都必须能够找到它们。我使用 FileOpenPicker
让用户 select 使用 PickMultipleFilesAsync() 方法处理照片。现在我不知道如何保存照片以便用户下次打开应用时显示给他们。
这是我的代码:
private async void AddButton_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add(".jpg");
openPicker.FileTypeFilter.Add(".jpeg");
openPicker.FileTypeFilter.Add(".bmp");
openPicker.FileTypeFilter.Add(".png");
IReadOnlyList<StorageFile> files = await openPicker.PickMultipleFilesAsync();
if (files.Count > 0)
{
foreach (StorageFile file in files)
{
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.DecodePixelHeight = 332;
bitmapImage.DecodePixelWidth = 200;
IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read);
await bitmapImage.SetSourceAsync(stream);
Wallpapers.Add(bitmapImage);
stream.Dispose();
}
}
}
谢谢大家
如果我对你的问题的理解正确,你想记住照片的保存位置(或照片的复制来源——并不重要)。您必须使用设置服务。
您可以使用 Windows.Storage.ApplicationData.Current.LocalSettings.Values
设置字典保存文件路径等信息以供日后调用。
例如:
Windows.Storage.ApplicationData.Current.LocalSettings.Values["PhotosPath"] = file.Path;
其中文件是代码中显示的 StorageFile 对象,下次检索时 Windows.Storage.ApplicationData.Current.LocalSettings.Values["PhotosPath"]
使用 Path 初始化文件对象。
您可以通过声明 using Windows.Storage;
命名空间(我认为您已经为 StorageFile 做了)来缩短上面的代码行,然后只使用
ApplicationData.Current.LocalSettings.Values["PhotosPath"]
部分在您的代码中。
进一步的建议: 如果您在项目中使用 T10 Template,您不会想直接使用 Windows.Storage.ApplicationData.Current.LocalSettings.Values 进行设置。 T10 在 Minimal Template 中的 Windows.Storage.ApplicationData.Current 上有一个更全面的设置服务(与备选的 Blank Template 相对),这就是你想改用。