Android clipping picture for the circle picture realization principle and code

  • 2020-05-09 19:14:15
  • OfStack

In the eoe forum, I have found a method to cut the image into a circle, but the effect was not very satisfactory. Due to the business requirements of the company these days, we need to cut the image into a circle to display it. This method is determined according to the height (height) and width (width) of the incoming image, if it is width < When = height, the height will be clipped. The clipped area is the length from the top to the width of width with the same width. If width > Then, height will cut the width. The height of the cut area is unchanged, while the width is the central area of the width of the taken picture. However, different business needs require different cutting pictures, so the cut area can be adjusted according to the business needs.

Okay, without further ado, go straight to the code
 
/** 
*  Convert the image to a circle  
* @param bitmap  The incoming Bitmap object  
* @return 
*/ 
public Bitmap toRoundBitmap(Bitmap bitmap) { 
int width = bitmap.getWidth(); 
int height = bitmap.getHeight(); 
float roundPx; 
float left,top,right,bottom,dst_left,dst_top,dst_right,dst_bottom; 
if (width <= height) { 
roundPx = width / 2; 
top = 0; 
bottom = width; 
left = 0; 
right = width; 
height = width; 
dst_left = 0; 
dst_top = 0; 
dst_right = width; 
dst_bottom = width; 
} else { 
roundPx = height / 2; 
float clip = (width - height) / 2; 
left = clip; 
right = width - clip; 
top = 0; 
bottom = height; 
width = height; 
dst_left = 0; 
dst_top = 0; 
dst_right = height; 
dst_bottom = height; 
} 
Bitmap output = Bitmap.createBitmap(width, 
height, Config.ARGB_8888); 
Canvas canvas = new Canvas(output); 
final int color = 0xff424242; 
final Paint paint = new Paint(); 
final Rect src = new Rect((int)left, (int)top, (int)right, (int)bottom); 
final Rect dst = new Rect((int)dst_left, (int)dst_top, (int)dst_right, (int)dst_bottom); 
final RectF rectF = new RectF(dst); 
paint.setAntiAlias(true); 
canvas.drawARGB(0, 0, 0, 0); 
paint.setColor(color); 
canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
canvas.drawBitmap(bitmap, src, dst, paint); 
return output; 
} 

Related articles: