Je décoder les images bitmap à partir de la carte SD en utilisant BitmapFactory.decodeFile
. Parfois, les images sont plus grandes que ce que les besoins de l'application ou le segment de mémoire le permet, donc j'utilise BitmapFactory.Options.inSampleSize
à la demande d'un sous-échantillonné (la plus petite), bitmap.
Le problème est que la plate-forme ne fait pas appliquer la valeur exacte de inSampleSize, et il m'arrive de finir avec une image soit trop petite, ou encore trop grande pour la mémoire disponible.
À partir de http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize:
Remarque: le décodeur va essayer de remplir cette demande, mais l'image résultante peut avoir des dimensions différentes que précisément ce qui a été demandé. Aussi, les puissances de 2 sont souvent plus rapide/plus facile pour le décodeur l'honneur.
Comment décoder les images bitmap à partir de la carte SD pour obtenir une image de la taille exacte, j'ai besoin de tout en consommant le moins de mémoire possible de le décoder?
Edit:
Code source de courant:
BitmapFactory.Options bounds = new BitmapFactory.Options();
this.bounds.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, bounds);
if (bounds.outWidth == -1) { // TODO: Error }
int width = bounds.outWidth;
int height = bounds.outHeight;
boolean withinBounds = width <= maxWidth && height <= maxHeight;
if (!withinBounds) {
int newWidth = calculateNewWidth(int width, int height);
float sampleSizeF = (float) width / (float) newWidth;
int sampleSize = Math.round(sampleSizeF);
BitmapFactory.Options resample = new BitmapFactory.Options();
resample.inSampleSize = sampleSize;
bitmap = BitmapFactory.decodeFile(filePath, resample);
}