在项目C#Windows Store应用程序之外添加图像

时间:2013-03-25 20:00:17

标签: c# windows-8 windows-runtime fileopenpicker

在我的xaml文件中,我有一个名为OutputImg的图像。 我还有一个名为OutputTB的文本块,用于显示图像的名称,还有一个按钮,可以让我从图片文件夹中选择图像。

代码背后:

private async void Button_Click_1(object sender, RoutedEventArgs e)
{
    FileOpenPicker openPicker = new FileOpenPicker();
    openPicker.ViewMode = Picker.ViewMode.List;
    openPicker.SuggestedStartLocation = PickerLocationId.PicutresLiibrary;
    openPicker.FileTypeFilter.Add(".png");
    StorageFile.file = await openPicker.PickSingleFileAsync();
    OutputTB.text = file.Name;


    BitmapImage image = new BitmapImage(new Uri(file.path));
    OutputImg.Source = image;
}

问题是即使我没有收到任何错误,我的照片也不会显示。它将图片的名称写入OutputTB.text,但Image只保持空白。如何使我选择的图像显示在OutputImg图像框中。

据我所知,这里可能有一个非常基本的东西,但它只是一个学习项目

1 个答案:

答案 0 :(得分:3)

您无法使用file.path为位图创建Uri对象,因为file.path会提供旧样式路径(例如c:\users\...\foo.png)。位图需要新样式的uri路径(例如ms-appdata:///local/path..to..file.../foo.png)。

但是,据我所知,没有任何方法可以为图片库指定新样式的uri路径。因此,您必须使用一个简单的解决方法:

由于您有对该文件的引用,您可以访问该文件的流,然后将该流设置为位图的源:

StorageFile file = await openPicker.PickSingleFileAsync();
OutputTB.text = file.Name;

// Open a stream for the selected file.
var fileStream =
    await file.OpenAsync(Windows.Storage.FileAccessMode.Read);

// Set the image source to the selected bitmap.
BitmapImage image = new BitmapImage();
image.SetSource(fileStream);

OutputImg.Source = image;