android Paint之setXfermode方法

setXfermode(Xfermode xfermode)

该方法用来设置两张图片相交时的模式,系统已经实现的Xfermode子类有以下三个:

1、AvoidXfermode 指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图)。

2、PixelXorXfermode 当覆盖已有的颜色时,应用一个简单的像素XOR操作。

3、PorterDuffXfermode 这是一个非常强大的转换模式,使用它,可以使用图像合成的16条Porter-Duff规则的任意一条来控制Paint如何与已有的Canvas图像进行交互

 

我们知道 在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。 如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint;

而setXfermode就可以来解决这个问题

 

一般来说 用法是这样的

 

[java] view plain copy
  1. Canvas canvas = new Canvas(bitmap1);     
  2.     
  3. paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));     
  4.     
  5. canvas.drawBitmap(mask, 0f, 0f, paint);   

 

就是在图片bitmap1上面绘制图片mask时 处理两者相交时候显示的问题

canvas原有的图片 可以理解为背景 就是dst
新画上去的图片 可以理解为前景 就是src

 

不同Mode的效果图如下:

android Paint之setXfermode方法_第1张图片

 

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                    http://www.cnblogs.com/jacktu/archive/2012/01/02/2310326.html

你可能感兴趣的:(android Paint之setXfermode方法)