web-dev-qa-db-fra.com

Mémoire image efficace redimensionner dans Android

J'essaie de réduire la taille des images récupérées de l'appareil photo (soit environ 5 à 8 mégapixels) à une taille un peu plus petite (la plus grande étant 1024x768). J'ai essayé le code suivant, mais je reçois systématiquement une OutOfMemoryError.

Bitmap image = BitmapFactory.decodeStream(this.image, null, opt);
int imgWidth = image.getWidth();
int imgHeight = image.getHeight();

// Constrain to given size but keep aspect ratio
float scaleFactor = Math.min(((float) width) / imgWidth, ((float) height) / imgHeight);

Matrix scale = new Matrix();
scale.postScale(scaleFactor, scaleFactor);
final Bitmap scaledImage = Bitmap.createBitmap(image, 0, 0, imgWidth, imgHeight, scale, false);

image.recycle();

Il semble que le MOO se produise pendant la createBitmap. Y at-il un moyen plus efficace de la mémoire pour faire cela? Peut-être que quelque chose qui ne nécessite pas que je charge tout l'original en mémoire?

14
Sionide21

Lorsque vous décodez le bitmap avec BitmapFactory, transmettez un objet BitmapFactory.Options et spécifiez inSampleSize. C'est le meilleur moyen d'économiser de la mémoire lors du décodage d'une image.

Voici un exemple de code Étrange problème de mémoire insuffisante lors du chargement d’une image dans un objet Bitmap

16
EboMike

Prenez-vous la photo avec l'appareil photo dans votre application? Si tel est le cas, vous devez définir une taille d'image plus petite en premier lieu lors de la capture via Android.hardware.Camera.Parameters.setPictureSize.

1
Mathias Conradt

Voici une question similaire à laquelle j'ai répondu et qui montre comment s'y prendre pour charger dynamiquement la taille d'image appropriée.

exception de mémoire insuffisante + analyse du vidage de fichier hprof

0
toidiu