#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.