开源中文网

您的位置: 首页 > Android开发 > 正文

Android裁剪图片为圆形图片的实现原理与代码

来源: 网络整理  作者: 佚名

以前在eoe论坛中找过裁剪图片为圆形图片的方法,但是效果都不是很理想,这几天因为公司业务的要求,需要对头像进行裁剪以圆形的方式显示,这个方法是根据传入的图片的高度(height)和宽度(width)决定的,如果是 width <= height时,则会裁剪高度,裁剪的区域是宽度不变高度从顶部到宽度width的长度;如果 width > height,则会裁剪宽度,裁剪的区域是高度不变,宽度是取的图片宽度的中心区域,不过不同的业务需求,对裁剪图片要求不一样,可以根据业务的需求来调整裁剪的区域。 

好了,不多说了,直接上代码 

代码如下:

/** 
* 转换图片成圆形 
* @param bitmap 传入Bitmap对象 
* @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; 

Tags:图片 圆形 原理
关于开源中文网 - 联系我们 - 广告服务 - 网站地图 - 版权声明