Paint之Xfermode属性
来源:互联网 发布:js 修改less 变量 编辑:程序博客网 时间:2024/05/12 06:11
1.下面的Xfermode子类可以改变这种行为:
AvoidXfermode 指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图)。
PixelXorXfermode 当覆盖已有的颜色时,应用一个简单的像素XOR操作。
PorterDuffXfermode 这是一个非常强大的转换模式,使用它,可以使用图像合成的16条Porter-Duff规则的任意一条来控制Paint如何与已有的Canvas图像进行交互。
要应用转换模式,可以使用setXferMode方法,如下所示:
xfermode 是否绘制,基于目标色和参数 op-color 的差距;
其中有两种模式,分别为 Avoid 和 TARGET:
Avoid模式:只会在目标像素值和 op-color "不一样" 的地方进行绘制;
Target模式:只会在目标像素值和 op-color "一样" 的地方进行绘制;
上面的"一样" 和 "不一样" 我都打上了引号,并不是指严格意义上的一样,而是只要在可容忍范围内就代表一样,这个可容忍范围,就是容差值(tolerance),0 代表最小容差,即得和 op-color 真正意义上一样才 ok ,255 则代表最大容差,只要有一点相近,则ok;
AvoidXfermode avoid = new AvoidXfermode(Color.BLUE, 10, AvoidXfermode.Mode. AVOID);
paint.setXfermode(avoid);
demo:
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 背景铺白
canvas.drawColor(Color.WHITE);
// 保存为单独的层
int saveCount = canvas.saveLayer(0, 0, mTotalWidth, mTotalHeight, mPaint,
Canvas.ALL_SAVE_FLAG);
// 绘制目标图
canvas.drawBitmap(mBottomBitmap, mBottomSrcRect, mBottomDestRect, mPaint);
// 设置混合模式
mPaint.setXfermode(mPorterDuffXfermode);
// 绘制源图
canvas.drawBitmap(mTopBitmap, mTopSrcRect, mTopDestRect, mPaint);
mPaint.setXfermode(null);
canvas.restoreToCount(saveCount);
}
2.Porter-Duff 效果图:
注:谁使用谁就是SRC
3.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
[Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc]
13.PorterDuff.Mode.DARKEN
[Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)]
14.PorterDuff.Mode.LIGHTEN
[Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)]
15.PorterDuff.Mode.MULTIPLY
[Sa * Da, Sc * Dc]
16.PorterDuff.Mode.SCREEN
[Sa + Da - Sa * Da, Sc + Dc - Sc * Dc]
- Paint之Xfermode属性
- Paint之Xfermode实战
- Android图像处理——Paint之Xfermode
- Android自定义View——Paint之Xfermode
- Paint---Xfermode、 PixelXorXfermode
- android paint Xfermode
- (八)Paint Xfermode
- Paint:xfermode的使用
- android之Paint属性
- 详解Paint的setXfermode(Xfermode xfermode)
- 详解Paint的setXfermode(Xfermode xfermode)
- 详解Paint的setXfermode(Xfermode xfermode)
- Paint PorterDuff及Xfermode详解
- Paint 的 Xfermode 的用法
- 安卓 Paint 的 Xfermode
- Android Paint Xfermode 详解(未完)
- Android之Paint属性介绍
- Android中Paint的setXfermode(Xfermode xfermode)方法讲解
- JavaScript跨域总结与解决办法
- Oracle11g RAC集群启动关闭管理
- Value Results,Not Just Effort
- NULL Nil nil NSNULL 关系与区别
- C++ Parse URL
- Paint之Xfermode属性
- 课时4:Statement语句
- 颜色转换 IOS中十六进制的颜色转换为UIColor
- 键盘消失的方法探讨
- 滚动窗口,Edit背景框变黑
- 35 个 Java 代码性能优化总结
- JavaWeb应用开发概述
- cardview 报了一个 android.view.InflateException: Binary XML file line # 异常
- Android发展历史