2011-09-25 3 views
1

Lorsque je tente de décoder un bitmap sur un émulateur en cours d'exécution moins de WVGA800 il fonctionne très bien (téléphones inclus), mais sur des écrans plus grands, il jette un OutOfMemoryErrorandroid OutOfMemoryError sur WVGA800 et pas petit format écran

Pourquoi serait-ce ? les téléphones avec de plus grands écrans auraient-ils plus de mémoire?

private Bitmap getBitmap(int assetKey) { return BitmapFactory.decodeResource(mContext.getResources(), assetKey); } 

Répondre

1

téléphones avec des écrans plus grands ne sont pas toujours plus de mémoire que les téléphones seront des displas plus petits. Les bitmaps décodés prennent beaucoup de mémoire, 4 octets de mémoire par pixel.

En général, il est recommandé de sous-échantillonner le bitmap s'il est trop grand. Vous pouvez le faire facilement:

BitmapFactory.Options opts = new BitmapFactory.Options(); 
opts.inSampleSize = n; // <-- this only decode every nth pixel 

Bitmap b = BitmapFactory.decodeResource(mContext, rId, ops); 
+0

Quand vous dites "décoder", voulez-vous dire qu'il "attrape" tous les autres pixels? Je travaille avec des feuilles de sprites, pas des images de la taille d'un fond d'écran. – GideonKain