web-dev-qa-db-fra.com

Android comment mettre à l'échelle une image avec les options BitmapFactory

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

18
saarraz1

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 .

10
jbowes

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.

5
Jave

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.

3
Shishir Shetty