Comment redimensionner un bitmap dans Android?

J’ai un bitmap d’une chaîne Base64 de ma firebase database distante ( encodedImage est la chaîne représentant l’image avec Base64):

 profileImage = (ImageView)findViewById(R.id.profileImage); byte[] imageAsBytes=null; try { imageAsBytes = Base64.decode(encodedImage.getBytes()); } catch (IOException e) {e.printStackTrace();} profileImage.setImageBitmap( BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length) ); 

profileImage est mon ImageView

Ok, mais je dois redimensionner cette image avant de la montrer sur mon ImageView de ma mise en page. Je dois le redimensionner à 120×120.

Quelqu’un peut-il me dire le code pour le redimensionner?

Les exemples que j’ai trouvés ne pouvaient pas être appliqués à une chaîne de bits obtenue en base64.

Changement:

 profileImage.setImageBitmap( BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length) 

À:

 Bitmap b = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length) profileImage.setImageBitmap(Bitmap.createScaledBitmap(b, 120, 120, false)); 
 public Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) { int width = bm.getWidth(); int height = bm.getHeight(); float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; // CREATE A MATRIX FOR THE MANIPULATION Masortingx masortingx = new Masortingx(); // RESIZE THE BIT MAP masortingx.postScale(scaleWidth, scaleHeight); // "RECREATE" THE NEW BITMAP Bitmap resizedBitmap = Bitmap.createBitmap( bm, 0, 0, width, height, masortingx, false); bm.recycle(); return resizedBitmap; } 

EDIT: comme suggéré par @aveschini, j’ai ajouté bm.recycle(); pour les memory leaks. Veuillez noter que si vous utilisez l’object précédent à d’autres fins, manipulez-le en conséquence.

Si vous avez déjà un bitmap, vous pouvez utiliser le code suivant pour redimensionner:

 Bitmap originalBitmap = ; Bitmap resizedBitmap = Bitmap.createScaledBitmap( originalBitmap, newWidth, newHeight, false); 

Échelle basée sur le rapport d’aspect :

 float aspectRatio = yourSelectedImage.getWidth() / (float) yourSelectedImage.getHeight(); int width = 480; int height = Math.round(width / aspectRatio); yourSelectedImage = Bitmap.createScaledBitmap( yourSelectedImage, width, height, false); 

Pour utiliser la hauteur comme base de la largeur, changez pour:

 int height = 480; int width = Math.round(height * aspectRatio); 

Mettez à l’échelle un bitmap avec une taille et une largeur maximales, tout en conservant les proportions:

 int maxHeight = 2000; int maxWidth = 2000; float scale = Math.min(((float)maxHeight / bitmap.getWidth()), ((float)maxWidth / bitmap.getHeight())); Masortingx masortingx = new Masortingx(); masortingx.postScale(scale, scale); bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), masortingx, true); 

Quelqu’un a demandé comment conserver les proportions dans cette situation:

Calculez le facteur que vous utilisez pour la mise à l’échelle et utilisez-le pour les deux dimensions. Disons que vous voulez une image à 20% de la hauteur de l’écran

 int scaleToUse = 20; // this will be our percentage Bitmap bmp = BitmapFactory.decodeResource( context.getResources(), R.drawable.mypng); int sizeY = screenResolution.y * scaleToUse / 100; int sizeX = bmp.getWidth() * sizeY / bmp.getHeight(); Bitmap scaled = Bitmap.createScaledBitmap(bmp, sizeX, sizeY, false); 

pour obtenir la résolution d’écran, vous disposez de cette solution: Obtenir les dimensions de l’écran en pixels

essayez ce code:

 BitmapDrawable drawable = (BitmapDrawable) imgview.getDrawable(); Bitmap bmp = drawable.getBitmap(); Bitmap b = Bitmap.createScaledBitmap(bmp, 120, 120, false); 

J’espère que c’est utile.

Essayez ceci: Cette fonction redimensionne proportionnellement un bitmap. Lorsque le dernier paramètre est défini sur “X”, le newDimensionXorY est traité comme une nouvelle largeur et lorsqu’il est défini sur “Y” une nouvelle hauteur.

 public Bitmap getProportionalBitmap(Bitmap bitmap, int newDimensionXorY, Ssortingng XorY) { if (bitmap == null) { return null; } float xyRatio = 0; int newWidth = 0; int newHeight = 0; if (XorY.toLowerCase().equals("x")) { xyRatio = (float) newDimensionXorY / bitmap.getWidth(); newHeight = (int) (bitmap.getHeight() * xyRatio); bitmap = Bitmap.createScaledBitmap( bitmap, newDimensionXorY, newHeight, true); } else if (XorY.toLowerCase().equals("y")) { xyRatio = (float) newDimensionXorY / bitmap.getHeight(); newWidth = (int) (bitmap.getWidth() * xyRatio); bitmap = Bitmap.createScaledBitmap( bitmap, newWidth, newDimensionXorY, true); } return bitmap; } 
  public Bitmap scaleBitmap(Bitmap mBitmap) { int ScaleSize = 250;//max Height or width to Scale int width = mBitmap.getWidth(); int height = mBitmap.getHeight(); float excessSizeRatio = width > height ? width / ScaleSize : height / ScaleSize; Bitmap bitmap = Bitmap.createBitmap( mBitmap, 0, 0,(int) (width/excessSizeRatio),(int) (height/excessSizeRatio)); //mBitmap.recycle(); if you are not using mBitmap Obj return bitmap; } 
 public static Bitmap resizeBitmapByScale( Bitmap bitmap, float scale, boolean recycle) { int width = Math.round(bitmap.getWidth() * scale); int height = Math.round(bitmap.getHeight() * scale); if (width == bitmap.getWidth() && height == bitmap.getHeight()) return bitmap; Bitmap target = Bitmap.createBitmap(width, height, getConfig(bitmap)); Canvas canvas = new Canvas(target); canvas.scale(scale, scale); Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG); canvas.drawBitmap(bitmap, 0, 0, paint); if (recycle) bitmap.recycle(); return target; } private static Bitmap.Config getConfig(Bitmap bitmap) { Bitmap.Config config = bitmap.getConfig(); if (config == null) { config = Bitmap.Config.ARGB_8888; } return config; } 
 profileImage.setImageBitmap( Bitmap.createScaledBitmap( BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length), 80, 80, false ) ); 

A partir de l’API 19, bitmap setWidth (int width) et setHeight (int height) existent. http://developer.android.com/reference/android/graphics/Bitmap.html

Bitmap Redimensionner en fonction de la taille de l’affichage

 public Bitmap bitmapResize(Bitmap imageBitmap) { Bitmap bitmap = imageBitmap; float lengthbmp = bitmap.getHeight(); float widthbmp = bitmap.getWidth(); // Get Screen width DisplayMesortingcs displaymesortingcs = new DisplayMesortingcs(); this.getWindowManager().getDefaultDisplay().getMesortingcs(displaymesortingcs); float hight = displaymesortingcs.heightPixels / 3; float width = displaymesortingcs.widthPixels / 3; int convertHighet = (int) hight, convertWidth = (int) width; // high length if (lengthbmp > hight) { convertHighet = (int) hight - 20; bitmap = Bitmap.createScaledBitmap(bitmap, convertWidth, convertHighet, true); } // high width if (widthbmp > width) { convertWidth = (int) width - 20; bitmap = Bitmap.createScaledBitmap(bitmap, convertWidth, convertHighet, true); } return bitmap; }