android 画图之setXfermode

来源:互联网 发布:关闭linux防火墙命令 编辑:程序博客网 时间:2024/05/21 22:26

http://blog.csdn.net/c8822882/article/details/6906768

setXfermode

设置两张图片相交时的模式

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

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



一般来说 用法是这样的

[java] view plaincopyprint?
  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的值 如下图


http://blog.sina.com.cn/s/blog_780f810701011gce.html

1. Xfermode
可以通过修改Paint的Xfermode影响在Canvas已有的图像上面绘制新的颜色的方式 
在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint;如果它是部分透明的,那么它将会被染上下面的颜色。

下面的Xfermode子类可以改变这种行为:
AvoidXfermode  指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图)。

PixelXorXfermode  当覆盖已有的颜色时,应用一个简单的像素XOR操作(异或)。

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

相关Demo可以在开发文档中的 API Demos 中的 Graphics 中找到


 

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

 

原创粉丝点击