UWP Set BitmapImage для управления изображением - PullRequest
1 голос
/ 07 октября 2019

Я использую библиотеку Prism для реализации связывания Image с BitmapImage.

Это xaml

<Button Grid.Row="1" Text="Resize Img" Command="{Binding ImageResize}"></Button>
<Image  Grid.Row="2" Source="{Binding ImageResult}"></Image>
<Image  Grid.Row="3" Source="{Binding ImageUri}"></Image>
<Label Text="{Binding ImageUri}"></Label>

Это ImagePageViewModel

public class ImagePageViewModel : BindableBase
{
    public ImagePageViewModel()
    {

    }
    private string _imageUri;
    public string ImageUri
    {
        get { return _imageUri; }
        set { SetProperty(ref _imageUri, value); }
    }
    private BitmapImage _imageResult;
    public BitmapImage ImageResult
    {
        get { return _imageResult; }
        set { SetProperty(ref _imageResult, value); }
    }

    private DelegateCommand _imageSelect;
    public DelegateCommand ImageSelect =>
        _imageSelect ?? (_imageSelect = new DelegateCommand(ExecuteImageSelect));

    async void ExecuteImageSelect()
    {
        try
        {
            var picker = new Windows.Storage.Pickers.FileOpenPicker
            {
                ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail,
                SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary
            };
            picker.FileTypeFilter.Add(".jpg");
            picker.FileTypeFilter.Add(".jpeg");
            picker.FileTypeFilter.Add(".png");

            Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
            if (file != null)
            {
                using (IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
                {
                    // Set the image source to the selected bitmap 
                    BitmapImage bitmapImage = new BitmapImage();
                    //bitmapImage.DecodePixelWidth = 600; //match the target Image.Width, not shown
                    await bitmapImage.SetSourceAsync(fileStream);
                    ImageResult = bitmapImage;
                    ImageUri = file.Path;
                    //ImageUri = @"http://pic26.nipic.com/20121221/9252150_142515375000_2.jpg";
                }
            }
            else
            {
                ImageUri = "";
            }
        }
        catch (Exception ex)
        {

            throw ex;
        }
    }        
}

Для приведенного выше кода, настройкаImageResult и установка ImageUri с помощью file.Path оба не работают. File.Path возвращает правильное значение для файла.

Работает только при использовании с сетевым файлом.

Связано ли это с правами доступа к файлу, если вы просматриваете файл на локальном диске?

Я предполагаю, что это связано с разрешением файла UWP, но есть идеи, как его разрешить?

1 Ответ

1 голос
/ 07 октября 2019

Способ настройки ImageResult хорошо работает для платформы UWP. Но установить источник изображения с file.Path не будет работать. UWP работает в песочнице, мы не можем получить доступ к файлу с путем в xaml. Я проверяю ваш код, он не похож на проект uwp. потому что UWP не содержит элемента управления Label. Если проект xamarin, см. изображение xamarin документ

Обновление

Проект Froms является общей библиотекой, не следует вызывать UWP FileOpenPicker в этом. По вашему требованию вы можете создать Dependency Service для Xamarin и преобразовать растровое изображение в источник изображения Xamarin. Для получения дополнительной информации см. case .

...