我是 Windows 8 开发和 Microsoft 技术的新手。我做过很多 iOS 开发,但之前从未接触过 Visual Studio、C# 等,所以我一次性学习了很多东西(框架、IDE、语言)。如果这很简单,请原谅我,但我无法在任何地方找到答案。
注意:我使用的是 Visual Studio Express 2013、C# 和 Windows 8.1
出于学习目的,我只是尝试创建一个应用程序来加载图像,将它们显示在屏幕上,并允许用户旋转、移动、调整大小和排列它们。我已经完成了这项工作,除了一个我无法弄清楚的主要错误:当我从某些目录加载图像时,一切正常,当我从其他目录加载图像时,我得到 E_NETWORK_ERROR 和 BitmapImage.ImageFailed。我看不出有什么理由。我实际上可以拍摄一个图像并将其放入一个目录中,它会加载,将相同的图像复制到另一个目录,它不会加载。
代码如下:
private async void addImageButton_Click(object sender, RoutedEventArgs e)
{
Windows.Storage.Pickers.FileOpenPicker filePicker = new Windows.Storage.Pickers.FileOpenPicker();
filePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
filePicker.FileTypeFilter.Add(".jpg");
filePicker.FileTypeFilter.Add(".png");
filePicker.FileTypeFilter.Add(".bmp");
filePicker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
Windows.Storage.StorageFile imageFile = await filePicker.PickSingleFileAsync();
if (imageFile != null)
{
System.Diagnostics.Debug.WriteLine(imageFile.Path);
Windows.UI.Xaml.Media.Imaging.BitmapImage bitmap = new Windows.UI.Xaml.Media.Imaging.BitmapImage(new Uri(imageFile.Path));
System.Diagnostics.Debug.WriteLine(bitmap.UriSource);
bitmap.CreateOptions = Windows.UI.Xaml.Media.Imaging.BitmapCreateOptions.None;
Image img = new Image();
img.Source = bitmap;
this.theCanvas.Children.Add(img);
}
}
这似乎对于某些目录中的图像文件非常有效,而对于其他目录则根本不起作用。例如:在我的图片库中,我有一个 Windows 8 相机应用程序保存到的“相机胶卷”目录,并且我还有我的 Steam 屏幕截图目录。如果我尝试打开 Steam 屏幕截图目录中的图像,效果很好;但是,如果我尝试加载相机胶卷目录中的图像,则会失败并显示 E_NETWORK_ERROR。如果我将图像从相机胶卷目录复制到 Steam 屏幕截图目录,我就可以打开它们。
谁能指出问题所在吗?我开始认为这不是一个代码问题,而是一个安全/功能/声明类型的问题。我是否需要声明或请求某些内容才能不受限制地访问文件系统?我需要以不同的方式形成我的 URI 还是什么?
编辑:以下是调试语句的一些输出,显示路径和 URI:
加载良好:
C:\Program Files (x86)\Steam\userdata\24321739\760\remote\72850\screenshots\2013-12-04_00001.jpg
file:///C:/Program Files (x86)/Steam/userdata/24321739/760/remote/72850/screenshots/2013-12-04_00001.jpg
导致 E_NETWORK_ERROR
C:\Users\Adam\Pictures\Camera Roll\WIN_20131023_194718.JPG
file:///C:/Users/Adam/Pictures/Camera Roll/WIN_20131023_194718.JPG
最佳答案
奇怪的问题,但我认为你应该稍微修改你的代码,如 this answer这里建议。尝试通过加载流来创建图像,而不是使用文件路径。
请确定,您的应用是否有权访问用户库中的文件?
关于c# - 通过 BitmapImage 加载某些目录中的图像会导致 E_NETWORK_ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21079846/