Получить источник изображения из изображения после загрузки - PullRequest
0 голосов
/ 24 октября 2019

В настоящее время я следую за тем, как загрузить изображение из фотогалереи телефона ссылка здесь , чтобы пользователи могли загружать изображение в мое приложение, которое они могут установить в качестве своего профиля. Я могу получить изображение из галереи телефона, однако, когда я пытаюсь сохранить его, я не могу получить источник изображения из xaml.

Ниже приведены xaml для изображения и кнопка, на которойпользователь нажимает на кнопку, чтобы загрузить изображение.

                <Button Text="Pick a Profile Image"
                        Clicked="OnPictureButton_Clicked"
                        Grid.Column="0"></Button>
                <Image Source="{Binding Employee.ProfilePicture}"
                        Grid.Column="1"
                        x:Name="profilePicture"
                        Grid.RowSpan="2"
                        WidthRequest="200"></Image>

Вот соответствующий код C #:

    private async void OnPictureButton_Clicked(object sender, EventArgs e)
    {
        (sender as Button).IsEnabled = false;

        // _stream is a private global variable
        // Allow the user to view images on the phone
        _stream = await DependencyService.Get<IPhotoPickerService>().GetImageStreamASync();

        // If they select an image, set it as the source for profilePicture
        if (_stream != null)
        {
            profilePicture.Source = ImageSource.FromStream(() => _stream);
        }

        (sender as Button).IsEnabled = true;

    }

    private async void Clicked_EmployeeSaved(object sender, EventArgs e)
    {
        var data = (EmployeeFull)BindingContext;
        var uploadedPicture = profilePicture.Source;    // Should be uploaded image

        // Testing how to get the source for the image (Can disregard for question)
        Bitmap bitmap = BitmapFactory.DecodeStream(_stream);
        MemoryStream ms = new MemoryStream();

        bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100, ms);

        byte[] byteArray;

        byteArray = ms.ToArray();

    }

Теперь я знаю, что когда пользователь выбирает изображение из галереи на своем устройстве, поток закрывается, и поэтому я не смогу получить к нему доступ позже в коде, как я пытался во второй показанной функции.

Однако я не могу получить имя изображения, которое у меня естьвыбран для загрузки. На экране пользователь может видеть это изображение, так как я установил выбранное изображение в качестве источника для тега profilePicture, но когда я пытаюсь получить этот источник, когда пользователь нажимает «сохранить», он показывает объект ImageSource`, а не строка, которую я ожидал.

Есть ли другой способ получить имя загруженного изображения?

1 Ответ

0 голосов
/ 24 октября 2019

Если вы уверены, что ImageSource является потоком, вы можете использовать приведенный ImageSource к StreamImageSource, а затем получить поток из этого.

Пример:

var imageStreamSource = (StreamImageSource)profilePicture.Source;
Stream actualStream = await imageStreamSource.Stream(new CancellationToken());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...