2015-06-20 3 views
1

Отображение нескольких изображений из галереи на странице вызывает исключение. Отображается одна фотография с разрешением (например, 3264x2488) на одной странице. Но когда дело доходит до отображения более одного с высоким разрешением, он падает на Android. Чем выше разрешение, тем меньше может отображаться на странице.Xamarin Forms Изображения на Android-дисплеях throws Exception

https://github.com/Crunch91/RezepteTagebuch/blob/master/RezepteTagebuch/RezepteTagebuch/Views/RecipeView.xaml

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     x:Class="RezepteTagebuch.Views.RecipeView"> 
    <...> 
    <StackLayout HorizontalOptions="Fill" Orientation="Horizontal"> 
     <Image Source="{Binding FoodPicture}"/> 
     <Image Source="{Binding DescriptionPicture}"/> 
    </StackLayout> 
    </...> 

я вижу такое же поведение в моей ListView. Одна фотография в ListView работает хорошо. Когда я добавлю еще одну фотографию, она снова сработает.

https://github.com/Crunch91/RezepteTagebuch/blob/master/RezepteTagebuch/RezepteTagebuch/Views/AllRecipeView.xaml

<StackLayout> 
    <ListView ItemsSource="{Binding Recipes}" x:Name="recipeList">  
    <...> 
    <ViewCell> 
     <StackLayout HorizontalOptions="StartAndExpand" Orientation="Horizontal"> 
      <Image WidthRequest="44" HeightRequest="44" Source="{Binding FoodPicturePath}" />    
     </StackLayout> 
    </ViewCell> 
    </...> 
    </ListView> 
</StackLayout> 

Это мой репо, где вы можете найти мои работы Xamarin Forms приложений:

https://github.com/Crunch91/RezepteTagebuch

Я отладки на Samsung Galaxy S3 с Android 4.3

Я был бы признателен, если бы кто-то мог помочь.

UPDATE:

@idoT был прав. Я получаю «OutOfMemoryException».

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

+0

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

+0

Да, это правда. Это исключение из памяти. Я попробовал фотографию с более низким разрешением 400x400. Теперь я могу отображать больше изображений. Но он по-прежнему падает, когда отображается более 20 изображений. – Crunch

+0

Возможно, вам потребуется уменьшить их еще больше, механизм рециркуляции должен начать переработку, если изображение не отображается на странице. Сколько изображений вписывается в одну страницу и сколько доступной памяти у вас есть в этой точке? – IdoT

ответ

2

Существует большая статья на разработчиков Android, как load large bitmaps efficiently:

public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, 
    int reqWidth, int reqHeight) { 

    // First decode with inJustDecodeBounds=true to check dimensions 
    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeResource(res, resId, options); 

    // Calculate inSampleSize 
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 
    return BitmapFactory.decodeResource(res, resId, options); 
} 

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

+0

Я предполагаю, что это может быть использовано для проекта только для Android. Но моя проблема направлена ​​на проект форм xamarin. – Crunch

Смежные вопросы