Не удается загрузить изображение с путем из FromFile в UWP - PullRequest
1 голос
/ 27 мая 2019

Я разрабатываю приложение для Android и UWP.На одном экране мне нужно загрузить изображение из файловой системы устройства и отобразить его.Странно это прекрасно работает на Android, но не на UWP.Кажется, что пути правильно возвращаются FilePicker ...

Мой XAML

<Image Grid.Row="0" Grid.Column="0" 
Source="{Binding NewImage}" Margin="10,10,10,10" Aspect="AspectFit" 
VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" />

Источник, который я использую для изображения

private FileImageSource _newImage;
public FileImageSource NewImage
        {
            get { return _newImage; }
            set
            {
                _newImage = value;
                OnPropertyChanged(nameof(NewImage));
            }
        }

Функция, котораяпредполагается загрузить изображение и установить путь.

private async void OnAddImage()
        {
            string[] types = { ".jpg", ".png" };
            FileData temp = await CrossFilePicker.Current.PickFile(types);
            if (temp == null)
            {
                return;
            }
            Debug.WriteLine($"ImagePath: {temp.FilePath}");
            Debug.WriteLine($"ImageName: {temp.FileName}");
            NewEntry.ImagePath = temp.FilePath;
            NewImage = (FileImageSource)ImageSource.FromFile(temp.FilePath);
        }

1 Ответ

1 голос
/ 28 мая 2019

Когда вы использовали средство выбора файлов для выбора изображений в UWP, эти изображения могут быть сохранены на внешнем диске. Мы можем использовать только путь для загрузки файлов, встроенных в проект или хранящихся в локальном хранилище на UWP: https://blogs.msdn.microsoft.com/wsdevsol/2012/12/04/skip-the-path-stick-to-the-storagefile/

Так что настройте событие загрузки следующим образом:

string[] types = { ".jpg", ".png" };
FileData temp = await CrossFilePicker.Current.PickFile(types);
if (temp == null)
{
    return;
}
Debug.WriteLine($"ImagePath: {temp.FilePath}");
Debug.WriteLine($"ImageName: {temp.FileName}");
//NewEntry.ImagePath = temp.FilePath;
NewImage = (StreamImageSource)ImageSource.FromStream(() => temp.GetStream());

// Property
private StreamImageSource _newImage;
public StreamImageSource NewImage
{
    get { return _newImage; }
    set
    {
        _newImage = value;
        OnPropertyChanged(nameof(NewImage));
    }
}

Это также адаптировано для Android.

...