Je veux créer une image bitmap à l'échelle, mais j'obtiens apparemment une image disproportionnée. Cela ressemble à un carré alors que je veux être rectangulaire.
Mon code:
Bitmap resizedBitmap = Bitmap.createScaledBitmap(myBitmap, 960, 960, false);
Je veux que l'image ait un MAX de 960. Comment puis-je faire cela? La définition de la largeur sur null
ne se compile pas. C'est probablement simple, mais je ne peux pas envelopper ma tête. Merci
Si vous avez déjà le bitmap d'origine en mémoire, vous n'avez pas besoin de faire tout le processus de inJustDecodeBounds
, inSampleSize
, etc. .
final int maxSize = 960;
int outWidth;
int outHeight;
int inWidth = myBitmap.getWidth();
int inHeight = myBitmap.getHeight();
if(inWidth > inHeight){
outWidth = maxSize;
outHeight = (inHeight * maxSize) / inWidth;
} else {
outHeight = maxSize;
outWidth = (inWidth * maxSize) / inHeight;
}
Bitmap resizedBitmap = Bitmap.createScaledBitmap(myBitmap, outWidth, outHeight, false);
Si la seule utilisation de cette image est une version à l'échelle, il vaut mieux utiliser la réponse de Tobiel, pour minimiser l'utilisation de la mémoire.
Votre image est carrée car vous définissez width = 960
et height = 960
.
Vous devez créer une méthode où vous passez la taille de l'image que vous voulez comme ceci: http://developer.Android.com/training/displaying-bitmaps/load-bitmap.html
Dans le code, cela ressemble à ceci:
public static Bitmap lessResolution (String filePath, int width, int height) {
int reqHeight = height;
int reqWidth = width;
BitmapFactory.Options options = new BitmapFactory.Options();
// First decode with inJustDecodeBounds=true to check dimensions
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(filePath, options);
}
private static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
// Calculate ratios of height and width to requested height and width
final int heightRatio = Math.round((float) height / (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
// Choose the smallest ratio as inSampleSize value, this will guarantee
// a final image with both dimensions larger than or equal to the
// requested height and width.
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
return inSampleSize;
}
bmpimg = Bitmap.createScaledBitmap(srcimg, 100, 50, true);