修改图片形状,位图形状

//获取资源位图
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,width);
    height=width;
}
else {
    bitmap_resource=Bitmap.createBitmap(bitmap_resource,((width-height)/2),0,height,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);
//绘制圆边矩形
RectF rectF=new RectF(0,0,iconHeight,iconWidth);
canvas.drawRoundRect(rectF,iconWidth/10,iconHeight/10,paint);

//为画笔设置Xfermode为只有源图像与目标图像相交的区域会被保留,其他区域将被清除
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap_resource,0,0,paint);//绘制资源位图,即只留下圆圈与资源位图重叠部分
 
//绘制好的圆形资源位图即为 bitmap_base

解析:

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

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

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

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

创建画笔Paint。

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

在画布绘制指定图形,圆圈Circle、圆边矩形RoundRect。

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

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

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

你可能感兴趣的:(android,java)