android Paint之setXfermode方法
2015-12-01 17:31
411 查看
setXfermode(Xfermode xfermode)
该方法用来设置两张图片相交时的模式,系统已经实现的Xfermode子类有以下三个:
1、AvoidXfermode 指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图)。
2、PixelXorXfermode 当覆盖已有的颜色时,应用一个简单的像素XOR操作。
3、PorterDuffXfermode 这是一个非常强大的转换模式,使用它,可以使用图像合成的16条Porter-Duff规则的任意一条来控制Paint如何与已有的Canvas图像进行交互
我们知道 在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。 如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint;
而setXfermode就可以来解决这个问题
一般来说 用法是这样的
[java] view
plaincopy
Canvas canvas = new Canvas(bitmap1);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(mask, 0f, 0f, paint);
就是在图片bitmap1上面绘制图片mask时 处理两者相交时候显示的问题
canvas原有的图片 可以理解为背景 就是dst
新画上去的图片 可以理解为前景 就是src
不同Mode的效果图如下:
16条Porter-Duff规则
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
本文转自:http://lipeng88213.iteye.com/blog/1189452
/article/4813291.html
该方法用来设置两张图片相交时的模式,系统已经实现的Xfermode子类有以下三个:
1、AvoidXfermode 指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图)。
2、PixelXorXfermode 当覆盖已有的颜色时,应用一个简单的像素XOR操作。
3、PorterDuffXfermode 这是一个非常强大的转换模式,使用它,可以使用图像合成的16条Porter-Duff规则的任意一条来控制Paint如何与已有的Canvas图像进行交互
我们知道 在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。 如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint;
而setXfermode就可以来解决这个问题
一般来说 用法是这样的
[java] view
plaincopy
Canvas canvas = new Canvas(bitmap1);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(mask, 0f, 0f, paint);
就是在图片bitmap1上面绘制图片mask时 处理两者相交时候显示的问题
canvas原有的图片 可以理解为背景 就是dst
新画上去的图片 可以理解为前景 就是src
不同Mode的效果图如下:
16条Porter-Duff规则
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
本文转自:http://lipeng88213.iteye.com/blog/1189452
/article/4813291.html
相关文章推荐
- [Android学习笔记七] 设备管理服务示例开发
- Android Canvas的save(),saveLayer()和restore()浅谈
- 正确使用Android之view.getWidth(),getHeight(),getLeft(),getRight(),getTop()
- Android实现图片验证码
- android Textview 使用之一:伸缩效果
- Android 6 检查权限代码
- android genymotion教程之神坑
- Android使用AsyncTask与Thread的区别(再用new Thread要舵手!)
- Android应用安全防御措施
- android中hotpatch
- <Android>初识一:令人头疼的R文件缺失问题
- Android 4.1 设置Activity切换动画(XML)
- android Fragment的使用
- 014Activity生命周期
- android资源管理和使用资源 (2015.12.1)
- Android中关于android:layout_weight
- Android第三方开源对话消息提示框:SweetAlertDialog(sweet-alert-dialog)
- android 转到桌面
- Android SDK 开发范例大全 ---3.7简单的按钮事件
- 直接拿来用!最火的Android开源项目