图像合成,是将两幅退昂放在一起的动作,它使得我们能够同时看到两幅图像的特征。

我们可以首先在Canvas对象上绘制一个位图对象,然后再相同的Canvas对象上绘制第二个位图对象的方式来实现合成。不过这里在绘制第二幅图像的时候,需要在Paint对象上指定一个过渡模式(Xfermode)。

可用作过渡模式的类集合都继承自Xfermode基类,而其中包括一个成为PorterDuffXfermode的类。PorterDuffXfermode因Thomas Porter和Tom Duff而得名,他们于1984年在ACM SIGGRAPH计算机图形学出版物上发表了题为“Compositing digital images”(合成数字图像)的文章,详细介绍了一系列不同的规则,用于彼此重叠的绘制图像。

利用ProterBuff.Mode我们可以完成任意2D图像测操作, 比如涂鸦画板应用中的橡皮擦效果,绘制各种自定义的进度,等等很强大的效果,下面请看具体的介绍:

    1.  Xfermode:

Xfermode有三个子类 :

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

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

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

要应用转换模式,可以使用setXferMode方法,如下所示:

  1. AvoidXfermode avoid = new AvoidXfermode(Color.BLUE, 10, AvoidXfermode.Mode. AVOID);    borderPen.setXfermode(avoid);

2.PorterDuff:

首先看一下效果图(来自ApiDemos/Graphics/XferModes)

在Android的PorterDuff.Mode类中列举了他们制定的规则:

android.graphics.PorterDuff.Mode. CLEAR 清除画布上图像

android.graphics.PorterDuff.Mode. SRC :只绘制源图像

android.graphics.PorterDuff.Mode. DST :只绘制目标图像

android.graphics.PorterDuff.Mode. DST_OVER :在源图像的顶部绘制目标图像

android.graphics.PorterDuff.Mode. DST_IN :只在源图像和目标图像相交的地方绘制目标图像

android.graphics.PorterDuff.Mode. DST_OUT :只在源图像和目标图像不相交的地方绘制目标图像

android.graphics.PorterDuff.Mode. DST_ATOP :在源图像和目标图像相交的地方绘制目标图像,在不相交的地方绘制源图像

android.graphics.PorterDuff.Mode. SRC_OVER :在目标图像的顶部绘制源图像

android.graphics.PorterDuff.Mode. SRC_IN :只在源图像和目标图像相交的地方绘制源图像

android.graphics.PorterDuff.Mode. SRC_OUT :只在源图像和目标图像不相交的地方绘制源图像

android.graphics.PorterDuff.Mode. SRC_ATOP :在源图像和目标图像相交的地方绘制源图像,在不相交的地方绘制目标图像

android.graphics.PorterDuff.Mode. XOR :在源图像和目标图像重叠之外的任何地方绘制他们,而在不重叠的地方不绘制任何内容

android.graphics.PorterDuff.Mode. LIGHTEN :获得每个位置上两幅图像中最亮的像素并显示

android.graphics.PorterDuff.Mode. DARKEN :获得每个位置上两幅图像中最暗的像素并显示

android.graphics.PorterDuff.Mode. MULTIPLY :将每个位置的两个像素相乘,除以255,然后使用该值创建一个新的像素进行显示。结果颜色=顶部颜色*底部颜色/255

android.graphics.PorterDuff.Mode. SCREEN :反转每个颜色,执行相同的操作(将他们相乘并除以255),然后再次反转。结果颜色=255-(((255-顶部颜色)*(255-底部颜色))/255)

最新文章

  1. Git 进阶指南
  2. java 使用map返回多个对象组装
  3. 禅道 Rest API 开发
  4. AIX下禁止crs随ha启动而启动
  5. sprint演示Scrum 项目7.0
  6. Excel 操作类
  7. H5不能少的功能-滑动分页
  8. HTML 网页游戏 2048
  9. Git之detached HEAD
  10. EditText无法失去焦点、失去焦点隐藏软键盘
  11. KD-tree详解
  12. xamarin android如何监听单击事件
  13. 用Composer获取第三方资源总是失败咋办?
  14. 使用iozone测试磁盘性能
  15. sed命令 windows与linux换行
  16. Hadoop中ssh+IP、ssh+别名免秘钥登录配置
  17. ASP.NET车辆管理系统
  18. Hadoop 初始化系统
  19. MySql: ”Commands out of sync“Error (Connect/C++)
  20. vue-cli 项目打包异常汇总

热门文章

  1. datetimepicker 初始化只显示年
  2. 20160408javaweb之JDBC ---PreparedStatement
  3. rc4加密
  4. 互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门)
  5. hibernate3.0 org.dom4j.DocumentException: Connection timed out: connect Nested exception:
  6. java web-----servelet
  7. How to change Visual Studio default environment setting
  8. MySQL的多实例
  9. mysql中 出现No query specified
  10. qwt6在Windows下Qt5的编译,安装,初步使用