Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to crop Bitmap Center like imageview? [duplicate]

Possible Duplicate:
How to crop the parsed image in android?

How does one crop the same way as Androids ImageView is doing

android:scaleType="centerCrop" 
like image 215
ericlee Avatar asked Nov 13 '11 15:11

ericlee


People also ask

How do I center a bitmap crop?

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 .

How do I crop a bitmap in android programmatically?

height = height - topcutoff; height = height - bottomcutoff; croppedBitmap = Bitmap. createBitmap(croppedBitmap, 0, topcutoff, width, height); Basically you just set a startpoint (topcutoff) from where to begin displaying the bitmap.


1 Answers

Your question is a bit short of information on what you want to accomplish, but I guess you have a Bitmap and want to scale that to a new size and that the scaling should be done as "centerCrop" works for ImageViews.

From Docs

Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions (width and height) of the image will be equal to or larger than the corresponding dimension of the view (minus padding).

As far as I know, there is no one-liner to do this (please correct me, if I'm wrong), but you could write your own method to do it. The following method calculates how to scale the original bitmap to the new size and draw it centered in the resulting Bitmap.

Hope it helps!

public Bitmap scaleCenterCrop(Bitmap source, int newHeight, int newWidth) {     int sourceWidth = source.getWidth();     int sourceHeight = source.getHeight();      // Compute the scaling factors to fit the new height and width, respectively.     // To cover the final image, the final scaling will be the bigger      // of these two.     float xScale = (float) newWidth / sourceWidth;     float yScale = (float) newHeight / sourceHeight;     float scale = Math.max(xScale, yScale);      // Now get the size of the source bitmap when scaled     float scaledWidth = scale * sourceWidth;     float scaledHeight = scale * sourceHeight;      // Let's find out the upper left coordinates if the scaled bitmap     // should be centered in the new size give by the parameters     float left = (newWidth - scaledWidth) / 2;     float top = (newHeight - scaledHeight) / 2;      // The target rectangle for the new, scaled version of the source bitmap will now     // be     RectF targetRect = new RectF(left, top, left + scaledWidth, top + scaledHeight);      // Finally, we create a new bitmap of the specified size and draw our new,     // scaled bitmap onto it.     Bitmap dest = Bitmap.createBitmap(newWidth, newHeight, source.getConfig());     Canvas canvas = new Canvas(dest);     canvas.drawBitmap(source, null, targetRect, null);      return dest; } 
like image 160
Albin Avatar answered Oct 11 '22 15:10

Albin