Изображение, не отображающее Xamarin.Forms

Я работаю над приложением Xamarin, которое является частью другого проекта, над которым я работал, API

Таким образом, API отправляет изображение профиля в приложение Xamarin в виде byte[], но приложение Xamarin не отображает его.

До сих пор я пробовал несколько вариантов с разных платформ, в том числе здесь, и все равно это не работает.

Я попытался преобразовать изображение в строку base 64, а затем преобразовать его обратно в байт [], прежде чем отображать его с помощью

imageProfilePic.Source = ImageSource.FromStream(() => new MemoryStream(base64Stream.ToArray()));

Среди других вариантов, которые я пробовал, - создание объекта потока памяти с использованием массива напрямую, я даже пытался вернуть изображение в виде строки base 64, затем преобразовал его в массив байтов и использовал для создания нового MemoryStream для отображения изображения.

Я начинаю думать, что с Xamarin возникла серьезная проблема.

Есть ли способ вернуть только URL-адрес изображения из API, я думаю, что это был бы лучший вариант,

Я храню изображение в базе данных в виде массива byte[], используя EF Core и MS SQL.


person developerharon    schedule 19.07.2020    source источник
comment
если это данные base64, вам нужно сначала их декодировать, а не просто преобразовать в байт[]. Вы должны записать данные изображения в файл после его загрузки, чтобы убедиться, что это допустимые данные изображения. И да, вы можете просто назначить источник изображения URL-адресу.   -  person Jason    schedule 19.07.2020
comment
Я уже пробовал это, и это не работает. Может быть, мне стоит попробовать сохранить его как файл и использовать ImageSource.From() и посмотреть, что произойдет.   -  person developerharon    schedule 20.07.2020
comment
Да, сохраните как файл и попробуйте еще раз, так будет лучше.   -  person Jack Hua    schedule 21.07.2020


Ответы (2)


Не могли бы вы преобразовать строку Base64 в массив байтов следующим образом:

var byteArray = Convert.FromBase64String(base64Stream);

А затем установите источник изображения;

imageProfilePic.Source = ImageSource.FromStream(()=> new MemoryStream(byteArray));
person Tuğçe Arar    schedule 19.07.2020
comment
Я уже пробовал это, но это не работает. Я пробовал все способы использования ImageSource.FromStream(); но они все не работают - person developerharon; 20.07.2020
comment
Вы проверили свою строку base64? возможно проблема в нем. - person Tuğçe Arar; 20.07.2020
comment
Я использую API, который я создал и запускаю локально, я храню фотографии в базе данных в виде массива byte[], когда я отображаю фотографии в веб-приложении, они работают очень хорошо. Но когда я отправляю те же фотографии в приложение Xamarin для Android, я отправляю их в виде массива byte[], я пытался изменить его на строку base64 и обратно на массив, чтобы отображать его с помощью ImageSource.FromStream, но это не работает. Я даже пытался отправить его из API в виде строки base64, но это все равно не сработает. Попробую переделать, может быть, я увижу что-то, что я пропустил - person developerharon; 20.07.2020

На самом деле я нашел способ отображения, я использовал URL-адрес. Поскольку у меня был доступ к API, я решил настроить API так, чтобы вместо хранения изображений в базе данных я сохранял их на файловом сервере и сохранял их URL-адрес в базе данных, и я бы вернул URL-адрес с API и использовал его для доступа к изображению в формате

локальный хост:/images/picture.jpg

Поскольку я размещаю API локально, локальный хост будет заменен IP-адресом.

И в приложении для Android это будет

picture.Source = ImageSource.FromUri(myUri);

И это сработало как шарм

person Community    schedule 21.07.2020