Android Crop Center of Bitmap Android Crop Center of Bitmap android android

Android Crop Center of Bitmap


enter image description here

This can be achieved with: Bitmap.createBitmap(source, x, y, width, height)

if (srcBmp.getWidth() >= srcBmp.getHeight()){  dstBmp = Bitmap.createBitmap(     srcBmp,      srcBmp.getWidth()/2 - srcBmp.getHeight()/2,     0,     srcBmp.getHeight(),      srcBmp.getHeight()     );}else{  dstBmp = Bitmap.createBitmap(     srcBmp,     0,      srcBmp.getHeight()/2 - srcBmp.getWidth()/2,     srcBmp.getWidth(),     srcBmp.getWidth()      );}


While most of the above answers provide a way to do this, there is already a built-in way to accomplish this and it's 1 line of code (ThumbnailUtils.extractThumbnail())

int dimension = getSquareCropDimensionForBitmap(bitmap);bitmap = ThumbnailUtils.extractThumbnail(bitmap, dimension, dimension);...//I added this method because people keep asking how //to calculate the dimensions of the bitmap...see comments belowpublic int getSquareCropDimensionForBitmap(Bitmap bitmap){    //use the smallest dimension of the image to crop to    return Math.min(bitmap.getWidth(), bitmap.getHeight());}

If you want the bitmap object to be recycled, you can pass options that make it so:

bitmap = ThumbnailUtils.extractThumbnail(bitmap, dimension, dimension, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);

From: ThumbnailUtils Documentation

public static Bitmap extractThumbnail (Bitmap source, int width, int height)

Added in API level 8 Creates a centered bitmap of the desired size.

Parameters source original bitmap source width targeted width height targeted height

I was getting out of memory errors sometimes when using the accepted answer, and using ThumbnailUtils resolved those issues for me. Plus, this is much cleaner and more reusable.


Have you considered doing this from the layout.xml ? You could set for your ImageView the ScaleType to android:scaleType="centerCrop" and set the dimensions of the image in the ImageView inside the layout.xml.