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

#c# #xaml #xamarin

#c# #xaml #xamarin

Вопрос:

Я делаю проект Xamarin для школы и не могу отобразить какие-либо изображения uri в моем пользовательском интерфейсе. Я всегда получаю эту ошибку в окне отладки:

java.lang.RuntimeException: Canvas: пытаюсь нарисовать слишком большое (241238816 байт) растровое изображение.

Это кроссплатформенный, поэтому я не могу просто задать запрос высоты и ширины, и Xamarin выполняет эту работу за меня. Я не могу просто загрузить picasso или FFImageLoading из Nuget и передать несколько параметров, потому что это Android И iOS. Кстати, UWP отсутствует. Только для Android и iOS. Я видел что-то на Github для изменения размера изображений, но это для файлов изображений, а не uri. Сначала сохранение изображения uri в виде файла не работает, потому что большинство из них имеют размер более 200 МБ каждый! Мне нужно передать источник «Image» в ImageSource.FromUri(новый Uri (myUriIWantToPass)); Я понимаю, что мне, вероятно, придется написать код для передачи строки uri, запроса высоты, запроса ширины. Создайте новое растровое изображение с уменьшенным размером. Затем загрузите его, а затем каким-то образом установите источник изображения на новое уменьшенное растровое изображение. Я скопирую и вставлю код для серверной части страницы. Это называется PlantProfilePage.xaml.cs, и этого кода должно быть достаточно, чтобы получить ответ.

 protected override void OnAppearing()
        {
            base.OnAppearing();
            FamilyName.BindingContext = this;
            GenusName.BindingContext = this;
            ScientificName.BindingContext = this;
            //PlantPicture.Source = ImageSource.FromUri(new Uri(uriList[0].ToString()));
            string url = "https://collections.nmnh.si.edu/media/index.php?irn=11986034";
            //string encodedURL = Uri.EscapeDataString(url);
            try
            {
                WebRequest request = WebRequest.Create(url);
                request.BeginGetResponse((IAsyncResult arg) =>
                {
                    Stream stream = request.EndGetResponse(arg).GetResponseStream();
                    ImageSource imageSource = ImageSource.FromStream(() => stream);
                    Device.BeginInvokeOnMainThread(() => PlantPicture.Source = imageSource);
                }, null);

                //PlantPicture.Source = UriImageSource.FromUri(new Uri(url));
            }
            catch (UriFormatException ufe)
            {
                Debug.WriteLine("Uri didn't work: "   ufe);
            }
  

Мне нужно изменить размер этих строк uri, которые я использую, с сотен мегабайт на что-то, что не приведет к тому, что проект выдаст мне ошибку:

java.lang.RuntimeException: Canvas: пытаюсь нарисовать слишком большое (241238816 байт) растровое изображение.

Это должно работать как для Android, так и для iOS.

Комментарии:

1. Загрузка FFImageLoading работает с XF — github.com/luberda-molinet/FFImageLoading/wiki / …

2. в качестве альтернативы я бы предложил использовать что-то вроде изображений. weserv.nl

3. URL, который я жестко запрограммировал в разделе code, — это всего лишь тот, который я пытаюсь отобразить. Как только я получу это для отображения в пользовательском интерфейсе, я собираюсь прокомментировать это и вернуться к отображению любого изображения uri из базы данных, к которой я запрашиваю изображения uri.

4. Я никогда не предполагал, что вы используете только один жестко закодированный URL. Это не меняет моих предложений

5. Спасибо. Я собираюсь начать пробовать предложения прямо сейчас. Я опубликую ответ позже.

Ответ №1:

Загрузка FFImageLoading сработала. Он покажет уменьшенные изображения uri для экрана Android и iPhone.