【发布时间】:2015-12-03 16:20:14
【问题描述】:
我在 Windows 通用应用程序的图像控件中显示 jpg 时遇到问题。 (我在尝试创建 Windows 8 应用商店应用时也遇到了同样的问题)
我有一个简单的表单,上面有一个 Image 控件。我想要做的就是能够打开本地驱动器上的文件夹或本地网络上的网络驱动器中的图像并显示它们。但我没有任何运气。我得到的唯一信息是 E_NETWORK_ERROR,没有其他信息。
我认为这可能与安全有关,但肯定必须有一个设置或许可才能让我这样做。我尝试在清单的“功能”选项卡中启用专用网络,但这没有帮助。我在声明中看不到任何听起来像我需要的东西。
我知道 UWP 应用在某种程度上是沙盒化的,但如果您甚至无法访问本地文件,它们有什么用?
这是我尝试过的代码示例。我也进行了其他迭代,但它们都有相同的最终结果。
Xaml:
<Image Name="Image1"/>
后面的代码:
public LoadImage()
{
var bitmap = new BitmapImage();
bitmap.ImageFailed += Bitmap_ImageFailed;
bitmap.UriSource = new Uri(@"D:\Users\Steve\Documents\SomeImage.JPG", UriKind.Absolute);
Image1.Source = bitmap;
}
private void Bitmap_ImageFailed(object sender, ExceptionRoutedEventArgs e)
{
Debug.Write(e.ErrorMessage);
}
当我运行它时,我最终会遇到 Bitmap_ImageFailed 事件,并且 ErrorMessage 属性只是“E_NETWORK_ERROR”,并且图像中没有显示任何内容。不是很有帮助。
我错过了什么?它必须是我忽略的简单而明显的东西。
更新:
多亏了这里的所有建议,我才得以顺利进行。我未能通过我的头骨的部分是你不能只给它一个文件夹并期望它读取文件,即使作为“快速和肮脏的测试”。您必须通过“适当的渠道”才能到达那里。我将它们拼凑在一起,并提出了这个示例,它显示了所选文件夹中的第一张图像:
private async void Button_Click(object sender, RoutedEventArgs e)
{
FolderPicker folderPicker = new FolderPicker();
folderPicker.SuggestedStartLocation = PickerLocationId.Desktop;
folderPicker.FileTypeFilter.Add(".jpg");
folderPicker.FileTypeFilter.Add(".tif");
folderPicker.FileTypeFilter.Add(".png");
StorageFolder folder = await folderPicker.PickSingleFolderAsync();
if (folder != null)
{
StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickedFolderToken", folder);
var files = await folder.GetFilesAsync();
var bitmap = new BitmapImage();
bitmap.ImageFailed += Bitmap_ImageFailed;
var stream = await files.First().OpenReadAsync();
await bitmap.SetSourceAsync(stream);
Image1.Source = bitmap;
}
}
此外,我必须将 .jpg、.tif 和 .png 的文件类型以及文件打开选择器添加到声明中。
【问题讨论】:
-
很确定你必须使用文件选择器。
-
查看文档以及 C# 示例 C# Image.Source property
-
文件选择器不是一个选项,因为最终目标是对一个充满图像的文件夹进行批处理,并且必须单独选择每个图像会破坏目的。如果我可以打开文件夹并访问其中的所有图像,文件夹选择器可能会起作用。 Peter 建议的副本中有一些关于 StorageApplicationPermissions.FutureAccessList 的内容,这听起来很有趣,因为我将来还需要能够访问这些文件,而无需用户每次都重新选择文件夹。至少是一个值得探索的方向。谢谢。
标签: c# xaml win-universal-app uwp