Xfermod 使用步骤
Xfermod 使用步骤 :
① 创建画笔 : 注意 , 绘制 源图像 和 目标图像 , 以及设置 Xfermod 图形组合模式 , 使用的都是这个画笔 ;
//创建画笔 Paint paint = new Paint();
② 绘制 目标图像 ( Destination Image ) : 先绘制的是目标图像 , 设置 Xfermod 图形组合模式后 , 绘制的是源图像 ;
//绘制目标图像 ( Destination Image ) canvas.drawBitmap(destinationImage, 0, 0, paint);
③ 设置 Xfermod 图形组合模式 : 设置 18 种 Xfermod 模式之一 , 创建 PorterDuffXfermode 对象 ( 传入模式对应的常量 ) , 将 Xfermod 对象设置给画笔 Paint 对象 ;
PorterDuff.Mode mode = // choose a mode paint.setXfermode(new PorterDuffXfermode(mode));
④ 绘制 目标图像 ( SourceImage ) : 先绘制的是目标图像 , 设置 Xfermod 图形组合模式后 , 绘制的是源图像 ;
//绘制 源图像 ( SourceImage ) canvas.drawBitmap(sourceImage, 0, 0, paint);
⑤ 代码总结 : 使用 Xfermod 的四个步骤 :
// 1.创建画笔 Paint paint = new Paint(); // 2.绘制目标图像 canvas.drawBitmap(destinationImage, 0, 0, paint); // 3.设置 Xfermod 图形组合模式 PorterDuff.Mode mode = // choose a mode paint.setXfermode(new PorterDuffXfermode(mode)); // 4.绘制 源图像 ( SourceImage ) canvas.drawBitmap(sourceImage, 0, 0, paint);
合成方程 ( Compositing equations )
合成对象 :
1.目标图像 ( Destination Image ) : 先绘制 的图像 是目标图像 ;
2.源图像 ( Source Image ) : 设置 Xfermod 之后 , 后绘制的图像 是 源图像 ;
方程中的相关变量说明 :
1.目标图像相关 :
① 目标图像 指定像素位置 的透明度 : α d s t \alpha_{dst}α
dst
;
② 目标图像 指定像素位置 的颜色值 : C d s t C_{dst}C
dst
;
2.源图像相关 :
① 源图像 指定像素位置 的透明度 : α s r c \alpha_{src}α
src
;
② 源图像 指定像素位置 的颜色值 : C s r c C_{src}C
src
;
3.合成结果相关 :
① 合成后 指定像素位置 的透明度 : α o u t \alpha_{out}α
out
;
② 合成后 指定像素位置 的颜色值 : C o u t C_{out}C
out
;
合成方程 :
1.方程来源 : 每一个独立的 透明度合成模式 或者 混合合成模式 都 提供了对应的方程 ;
2.方程作用 : 这些方程用于计算 源图像 与 目标图像 合成结果的 对应像素点的 透明度 和 颜色值 ;
老版本的表示方法
老版本的表示方法 :
1.目标图像相关 : [ D a , D c ] [D_a , D_c][D
a
,D
c
] , 表示该目标图像的透明度和颜色值属性 ;
① 目标图像 指定像素位置 的透明度 : D a D_aD
a
;
② 目标图像 指定像素位置 的颜色值 : D c D_cD
c
;
2.源图像相关 : [ S a , S c ] [S_a , S_c][S
a
,S
c
] , 表示该源图像的透明度和颜色值属性 ;
① 源图像 指定像素位置 的透明度 : S a S_aS
a
;
② 源图像 指定像素位置 的颜色值 : S c S_cS
c
;
3.合成结果相关 : [ R a , R c ] [R_a , R_c][R
a
,R
c
] , 表示该合成结果图像的透明度和颜色值属性 ;
① 合成后 指定像素位置 的透明度 : R a R_aR
a
;
② 合成后 指定像素位置 的颜色值 : R c R_cR
c
;
合成模式 相关 区域
合成区域描述 :
① 集合 S SS 表示 源图像素 不透明区域 ;
② 集合 D DD 表示目标图像像素 不透明区域 ;
③ 集合 R RR 表示绘制结果的不透明区域 ;
④ 集合 A AA 代表全集所有区域 ( 整个框透明 + 不透明所有区域 ) ;
⑤ 集合 S ∩ D S \cap DS∩D 表示 源图像 与 目标图像 不透明区域的交集 ;
⑥ 集合 S ∪ D S \cup DS∪D 表示 源图像 与 目标图像 不透明区域的并集 ;
之后的每个模式都要分析上述某几个区域的 透明度 和 颜色值 ;