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);
合成对象 :
方程中的相关变量说明 :
;
;
;
;
;
;
合成方程 :
老版本的表示方法 :
, 表示该目标图像的透明度和颜色值属性 ;
;
;
, 表示该源图像的透明度和颜色值属性 ;
;
;
, 表示该合成结果图像的透明度和颜色值属性 ;
;
;
合成区域描述 :
表示 源图像素 不透明区域 ;
表示目标图像像素 不透明区域 ;
表示绘制结果的不透明区域 ;
代表全集所有区域 ( 整个框透明 + 不透明所有区域 ) ;
表示 源图像 与 目标图像 不透明区域的交集 ;
表示 源图像 与 目标图像 不透明区域的并集 ;
之后的每个模式都要分析上述某几个区域的 透明度 和 颜色值 ;