Добавление изображения вне проекта C# Приложение Магазина Windows

В моем файле 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, но изображение остается пустым. Как сделать так, чтобы выбранное изображение появилось в поле "OutputImg image".

Я понимаю, что, может быть, здесь есть что-то очень основное, чего мне не хватает, но это просто проект обучения

1 ответ

Решение

Вы не можете использовать 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;
Другие вопросы по тегам