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
相关文章推荐
- js的隐含参数(arguments,callee,caller)使用方法
- Bootstrap是什么,Bootstrap里的文件分别表示什么?都有什么用?
- 剑指offer(四十二)之左旋转字符串
- XML与HTML
- Delphi语言最好的JSON代码库 mORMot学习笔记1
- JS 职责链模式
- javascript 文本框值变化触发事件
- CSS长度单位及区别 em ex px pt in
- Jquery-2简单的登录输入框判断
- fedora samba|qemu iptables 设置
- jQuery实现楼梯
- javascript浅谈循环
- jquery 变量和原生js变量的关系
- ie下css兼容问题
- jsp导入java代码不编译问题
- html5 跳转方式
- js小方法+Canvas 利用js 实现浏览器保存图片到本地
- htmk5 ,js的多种跳转方式
- 前端代码规范(静态检查)工具
- css的性能优化