J'ai une grande bitmap (par exemple 3888x2592) dans un fichier. Maintenant, je veux redimensionner cette bitmap en 800x533 et l'enregistrer dans un autre fichier. Normalement, je redimensionnerais la bitmap en appelant la méthode Bitmap.createBitmap
mais elle nécessite une bitmap source en tant que premier argument, que je ne peux pas fournir car charger l'image originale dans un objet Bitmap dépasserait bien sûr la mémoire (voir ici, par exemple).
Je ne peux pas non plus lire la bitmap avec, par exemple, BitmapFactory.decodeFile(file, options)
, en fournissant un BitmapFactory.Options.inSampleSize
, car je veux la redimensionner à une largeur et une hauteur exactes. Utiliser inSampleSize
redimensionnerait la bitmap en 972x648 (si j'utilise inSampleSize=4
) ou en 778x518 (si j'utilise inSampleSize=5
, qui n'est même pas une puissance de 2).
J'aimerais également éviter de lire l'image en utilisant inSampleSize avec, par exemple, 972x648 dans une première étape, puis en la redimensionnant exactement en 800x533 dans une deuxième étape, car la qualité serait médiocre par rapport à une redimension directe de l'image d'origine.
Pour résumer ma question : y a-t-il un moyen de lire un fichier image de grande taille avec 10 MP ou plus et de l'enregistrer dans un nouveau fichier image, redimensionné à une nouvelle largeur et hauteur spécifique, sans obtenir d'exception OutOfMemory ?
J'ai également essayé BitmapFactory.decodeFile(file, options)
et en définissant manuellement les valeurs Options.outHeight et Options.outWidth sur 800 et 533, mais cela ne fonctionne pas de cette manière.
0 votes
Non, les outHeight et outWidth sont des paramètres sortants de la méthode de décodage. Cela étant dit, j'ai le même problème que vous, et je ne suis pas très satisfait de l'approche en 2 étapes.
0 votes
Souvent, Dieu merci, vous pouvez utiliser une seule ligne de code .. stackoverflow.com/a/17733530/294884
0 votes
Lecteurs, veuillez noter ce QA absolument essentiel !!! stackoverflow.com/a/24135522/294884
1 votes
Veuillez noter que cette question a maintenant 5 ans, et la solution complète est .. stackoverflow.com/a/24135522/294884 Cheers!
2 votes
Il y a maintenant une documentation officielle sur ce sujet : developer.android.com/training/displaying-bitmaps/…
0 votes
Voir également Problème étrange de mémoire insuffisante lors du chargement d'une image dans un objet Bitmap.