0

How to centerCrop an image like the same method "centerCrop" do in xml android ? I don't want to crop the center of the image .I have tried the below code but ,it was cropping the center portion of the image,and it produce a square shaped image,I want the same centerCrop function to use in a Canvas on android.Can anyone help?? Hope my question is clear to you.

 Bitmap bitmap=BitmapFactory.decodeResource(res, (R.drawable.ice));
        Bitmap cropBmp;
        if (bitmap.getWidth() >= bitmap.getHeight()){

            cropBmp = Bitmap.createBitmap(
                    bitmap,
                    bitmap.getWidth()/2 - bitmap.getHeight()/2,
                    0,
                    bitmap.getHeight(),
                    bitmap.getHeight()
            );

        }else{

            cropBmp = Bitmap.createBitmap(
                    bitmap,
                    0,
                    bitmap.getHeight()/2 - bitmap.getWidth()/2,
                    bitmap.getWidth(),
                    bitmap.getWidth()
            );
        }

        dstRectForRender.set(50,20 ,500 ,360 );
        canvas2.drawBitmap(cropBmp, null, dstRectForRender, paint);
Jack
  • 1,825
  • 3
  • 26
  • 43
  • http://stackoverflow.com/questions/6908604/android-crop-center-of-bitmap – Kaushik Oct 02 '15 at 10:32
  • you will find your answers in the following link http://stackoverflow.com/questions/6908604/android-crop-center-of-bitmap – Hira Aftab Oct 02 '15 at 10:39
  • Hi I have tried the same code ,this code is working but the image is in a square shape.It crops only the center portion of the image – Jack Oct 02 '15 at 10:46

1 Answers1

1

If you want to do same effect (exactly same effect), you can watch how Android do it here: https://github.com/android/platform_frameworks_base/blob/3f453164ec884d26a556477027b430cb22a9b7e3/core/java/android/widget/ImageView.java

Interesting part of code about CENTER_CROP:

[...]
mDrawMatrix = mMatrix;

float scale;
float dx = 0, dy = 0;

if (dwidth * vheight > vwidth * dheight) {
    scale = (float) vheight / (float) dheight; 
    dx = (vwidth - dwidth * scale) * 0.5f;
} else {
    scale = (float) vwidth / (float) dwidth;
    dy = (vheight - dheight * scale) * 0.5f;
}

mDrawMatrix.setScale(scale, scale);
mDrawMatrix.postTranslate((int) (dx + 0.5f), (int) (dy + 0.5f));

[...]
Mou
  • 2,027
  • 1
  • 18
  • 29