Je souhaite décoder une image de la carte SD avec BitmapFactory.decodeFile (chemin, options).
Je souhaite également que les images dont la taille est supérieure à 2 048 x 2 048 pixels soient réduites à 2 048 x 2 048 au maximum (en conservant les proportions).
Je pourrais le faire manuellement après avoir obtenu le bitmap, mais cela nécessiterait d'allouer une grande quantité d'octets en plus de ceux déjà alloués.
Comment dois-je configurer mon objet BitmapFactory.Options pour obtenir cet effet?
Merci
Utilisez BitmapFactory.Options.inSampleSize lorsque vous chargez votre image pour la première fois pour obtenir la taille aussi proche que possible de votre taille cible, puis utilisez Bitmap.createScaledBitmap
pour s'adapter à la taille exacte souhaitée.
Il y a du code pour cela dans cette réponse .
Commencez par définir inJustDecodeBounds
sur true
dans votre Options
, cela vous donnera la taille de l'image, sans charger aucune des données d'image.
Si la taille de l'image est inférieure à votre taille maximale, chargez-la comme d'habitude.
Si par contre, il est trop grand, utilisez inSampleSize
pour lire un bitmap plus petit.
Remarque: Je ne pense pas que le décodage effectue un filtrage lors de l'utilisation de inSampleSize, vous risquez donc de perdre quelques détails, mais comme votre taille d'image l'est tellement big (2048 px) Je ne pense pas que cela posera de problèmes.
Vous pouvez essayer quelque chose comme ceci:
int imageWidth, imageHeight;
Bitmap result = Bitmap.createScaledBitmap(bitmapPicture,
imageWidth, imageHeight, false);
Ici, vous pouvez ajouter votre propre largeur et hauteur. bitmapPicture
est l'objet de Bitmap
. Faites-moi savoir si cela vous est utile.