Redimensionnement d'image efficace dans la mémoire sous Android
Je suis en train de réduire la taille des images extraites forme de la caméra (donc ~5 à 8 méga pixels) à un un un peu plus petites tailles (le plus important étant de 1024x768). J'ai Essayé le code suivant mais j'ai toujours obtenir un 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 ressemble à la OOM qui se passe pendant la createBitmap
. Est-il plus efficace en terme de mémoire façon de le faire? Peut-être que quelque chose ne va pas m'obliger à charge de la totalité de l'original dans la mémoire?
source d'informationauteur Sionide21
Vous devez vous connecter pour publier un commentaire.
Lorsque vous décoder l'image bitmap avec la BitmapFactory, passer une BitmapFactory.Options de l'objet et indiquez inSampleSize. C'est le meilleur moyen pour économiser de la mémoire lors du décodage d'une image.
Voici un exemple de code Étrange, hors de question de la mémoire lors du chargement d'une image à un objet Bitmap
Êtes-vous de prendre la photo avec l'appareil photo dans votre application? Si oui, vous devez définir la taille de l'image pour une plus petite en premier lieu quand ils sont capturés par
android.hardware.Camera.Parameters.setPictureSize
Voici une question similaire que j'ai répondu, et de montrer comment aller sur le chargement dynamique de la taille appropriée.
de mémoire d'exception + analyse hprof fichier de vidage