制作圆形位图Bitmap

//获取资源位图
Bitmap bitmap_resource=BitmapFactory.decodeResource(getResources(),R.drawable.icon);
int height=bitmap_resource.getHeight();
int width= bitmap_resource.getWidth();
//将资源位图剪裁为正方形
if(height>width){
    bitmap_resource=Bitmap.createBitmap(bitmap_resource,0,((height-width)/2),width,height);
    height=width;
}
else {
    bitmap_resource=Bitmap.createBitmap(bitmap_resource,((width-height)/2),0,width,height);
    width=height;
}

//创建与资源位图大小相同,用于绘制的空白(基础)位图
Bitmap bitmap_base=Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);
//根据空白(基础)位图生成画布
Canvas canvas=new Canvas(bitmap_base);
Paint paint=new Paint();
paint.setAntiAlias(true);//为画笔设置抗锯齿
canvas.drawCircle(width/2,height/2,width/2,paint);//绘制圆圈
//为画笔设置Xfermode为只有源图像与目标图像相交的区域会被保留,其他区域将被清除
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap_resource,0,0,paint);//绘制资源位图,即只留下圆圈与资源位图重叠部分

//绘制好的圆形资源位图即为 bitmap_base
return bitmap_base;

解析:

获取图片资源生成位图(bitmap_resource)

根据资源位图长宽,剪裁居中部分正方形(bitmap_resource)

创建与资源位图(bitmap_resource)大小相同(剪裁后)的,用于绘制的空白(基础)位图(bitmap_base)

根据空白(基础)位图(bitmap_base)生成画布Canvas

创建画笔Paint

为画笔设置抗锯齿setAntiAlias(true)

在画布绘制圆圈Circle

为画笔设置Xfermode为new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)  只有源图像与目标图像相交的区域会被保留,其他区域将被清除

在画布绘制资源位图(bitmap_resource),即只会保留圆圈与资源位图重合部分(圆形资源位图)

所得到的圆形资源位图即为bitmap_base

你可能感兴趣的:(android)