您的位置:首页 > Web前端

PorterDuffXfermode

2016-06-07 20:12 225 查看

通过PorterDuffXfermode设置圆角/圆形图片:

效果图:



/**
* 圆或圆角图片
* @param bitmap
* @param drawcircle 是否绘制圆
* @return
*/
public Bitmap  toRoundBitmap(Bitmap bitmap,boolean drawcircle) {
int width =  bitmap.getWidth();// 获取图片的宽度
int height =  bitmap.getHeight();// 获取图片的高度
int  squareWidth = Math.min(width, height);
// 正方形的边长,以宽和高中最小的那个为参照,截取正方形
Bitmap backgroundBmp = Bitmap.createBitmap(squareWidth,squareWidth,Config.ARGB_8888);// 构建一个正方形的bitmap
// 创建一个画布,用于画图
Canvas canvas = new Canvas(backgroundBmp);
// 创建一个画笔
Paint paint = new Paint();
paint.setAntiAlias(true); // 设置边缘光滑,去掉锯齿
//取正中间的部分、正方形的左上右下坐标
Rect src = new  Rect(width/2-squareWidth/2,height/2-squareWidth/2, width/2+squareWidth/2,  height/2+squareWidth/2);
//目标图片的大小
RectF dest = new  RectF(0,0, squareWidth, squareWidth);
if(drawcircle){
canvas.drawCircle(squareWidth/2,  squareWidth/2, squareWidth/2, paint);//画一个圆
}else{
canvas.drawRoundRect(dest, 100,100, paint); //画圆角
}
// 设置当两个图形相交时的模式,SRC_IN为取图形相交的部分,多余的将被去掉
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, src, dest,  paint); // canvas将bitmap画在backgroundBmp上
return  backgroundBmp; // 返回已经绘画好的backgroundBmp
}


PorterDuffXfermode:

效果图(来自ApiDemos/Graphics/XferModes)



PorterDuff.Mode为枚举类,一共有16个枚举值:

1.PorterDuff.Mode.CLEAR

所绘制不会提交到画布上。

2.PorterDuff.Mode.SRC

显示上层绘制图片

3.PorterDuff.Mode.DST

显示下层绘制图片

4.PorterDuff.Mode.SRC_OVER

正常绘制显示,上下层绘制叠盖。

5.PorterDuff.Mode.DST_OVER

上下层都显示。下层居上显示。

6.PorterDuff.Mode.SRC_IN

取两层绘制交集。显示上层。

7.PorterDuff.Mode.DST_IN

取两层绘制交集。显示下层。

8.PorterDuff.Mode.SRC_OUT

取上层绘制非交集部分。

9.PorterDuff.Mode.DST_OUT

取下层绘制非交集部分。

10.PorterDuff.Mode.SRC_ATOP

取下层非交集部分与上层交集部分

11.PorterDuff.Mode.DST_ATOP

取上层非交集部分与下层交集部分

12.PorterDuff.Mode.XOR

异或:去除两图层交集部分

13.PorterDuff.Mode.DARKEN

取两图层全部区域,交集部分颜色加深

14.PorterDuff.Mode.LIGHTEN

取两图层全部,点亮交集部分颜色

15.PorterDuff.Mode.MULTIPLY

取两图层交集部分叠加后颜色

16.PorterDuff.Mode.SCREEN

取两图层全部区域,交集部分变为透明色

canvas原有的图片可以理解为背景,就是dst;新画上去的图片可以理解为前景,就是src

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: