我在Windows Universal应用程序的图像控件中显示jpg时遇到问题。(尝试创建Windows 8 Store应用程序时也遇到了同样的问题)
我有一个带有Image控件的简单表单。我要做的就是能够打开本地驱动器或本地网络上的网络驱动器中的文件夹中的图像并显示它们。但是我没有运气。我唯一得到的是E_NETWORK_ERROR,没有其他信息。
我认为它可能与安全性有关,但是肯定有一个设置或权限才能允许我这样做。我尝试在清单的“功能”选项卡中启用“专用网络”,但这无济于事。我没有在《宣言》中看到任何听起来像我需要的东西。
我知道UWP应用有些沙盒化,但是如果您甚至无法访问本地文件,它们有什么用?
这是我尝试过的代码示例。我也做了其他迭代,但是它们都有相同的最终结果。
Xml:
<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的文件类型以及“文件打开选择器”添加到声明中。
您可以在MSDN文章文件访问权限中找出所有必要的信息。
除了默认位置之外,应用程序还可以通过在应用程序清单中声明功能(请参阅应用程序功能声明),或通过调用文件选择器让用户选择文件和文件夹供应用程序访问(请参见应用程序访问)来访问其他文件和文件夹。使用选择器打开文件和文件夹)。
因此,如果要从用户文档文件夹中读取文件,则需要更新应用程序AppXManifest以请求文档库访问功能。
您还需要通过声明要访问的文件类型来更新AppXManifest。这样,即使可以访问文件夹,您也只能访问一组有限的文件类型。您必须在“声明”选项卡上指定支持的文件类型
我设置了一个新的文件类型(.txt),然后从那里开始起作用。和代码示例
async void Button_Click_2(object sender, RoutedEventArgs e)
{
var _Name = "HelloWorld.txt";
var _Folder = KnownFolders.DocumentsLibrary;
var _Option = Windows.Storage.CreationCollisionOption.ReplaceExisting;
// create file
var _File = await _Folder.CreateFileAsync(_Name, _Option);
// write content
var _WriteThis = "Hello world!";
await Windows.Storage.FileIO.WriteTextAsync(_File, _WriteThis);
// acquire file
try { _File = await _Folder.GetFileAsync(_Name); }
catch (FileNotFoundException) { /* TODO */ }
// read content
var _Content = await FileIO.ReadTextAsync(_File);
await new Windows.UI.Popups.MessageDialog(_Content).ShowAsync();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句