c# - 通过 BitmapImage 加载某些目录中的图像会导致 E_NETWORK_ERROR

标签 c# windows-runtime winrt-xaml windows-8.1 imaging

我是 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/

相关文章:

c# - C# 中的 SOAP 序列化忽略对象但包含其数据成员

c# - 多维数组列排序

c# - 处理潜在危险的查询字符串

xaml - 如何从 GridViewItem Tap 事件 (XAML) 执行命令

java - 如何在 Java 中获得与 C# 中相同的 MD5 字符串

java - 如何在 Java 的一个 cmd 窗口中运行多个命令?

c# - 如何在 Windows Store (Metro) 应用程序的 DataAnnotations 中使用 "ErrorMessageResourceType"

xaml - 这是一个错误吗?在运行时更改 Windows 应用商店应用程序代码中的 TextBlock 样式

c# - 在 WinRT C# 中,如何使用 RenderTargetBitmap 保存屏幕外 XAML 树?

xaml - 如何使用 C# 和 XAML 在 Metro 中的 Canvas 上绘图