您的位置:首页 > 其它

Wiki

2016-04-22 22:00 218 查看
/**
* 头像圆形裁剪
*
* @param source
* @return
*/
public static Bitmap circleBitMap(Bitmap source) {
final Paint paint = new Paint();
//抗锯齿效果
int width = source.getWidth();
paint.setAntiAlias(true);
//指定大小bitmap
Bitmap target = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888);
//根据target生成一个画布
Canvas canvas = new Canvas(target);
//在画布上画了一个圆
//参数CX,cy-->确定绘制圆的圆心点
//半径参数
//画笔
canvas.drawCircle(width / 2, width / 2, width / 2, paint);
//这句话是关键:
//分析:我们以一张图片作为画布,在上面画了一个圆-->画图展示-->"这时候,绘制的圆和图片本身就出现了一个圆形的交集图案"
//setXfermode:设置当绘制的图像出现相交情况时候的处理方式的,它包含的常用模式有哪几种
//PorterDuff.Mode.SRC_IN 取两层图像交集部门,只显示上层图像,注意这里是指取相交叉的部分,然后显示上层图像
//PorterDuff.Mode.DST_IN 取两层图像交集部门,只显示下层图像
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
//使用设置了setXfermode方案的paint绘制图像
canvas.drawBitmap(source, 0, 0, paint);
return target;
}
根据传入的source bitmap创建一个空(内容为空,宽度和高度为source .getWidth)的bitmap对象(target bitmap) ,那么我们要怎么样才能使target  bitmap对象的内容不为空,为我们想要的内容呢?这时候就需要我们以这个target bitmap对象为模板给它搞一个同等大小的画布铺在上面准备作画(即以target bitmap为模板创建一个画布对象),创建了好了画布,我们就可以在这个画布上画东西了,先在画布上画一个圆,然后设置Xfermode模式,再在画布上画source
bitmap,这样,我们的target  bitmap就有内容了,并且它的内容按照设置Xfermode模式的形式来显示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: