关于PorterDuffXferMode的用法

Posted xiongbo753

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于PorterDuffXferMode的用法相关的知识,希望对你有一定的参考价值。

 

 

  在了解 PorterDuffXferMode的用法之前,我们可以先看一张图片。出自API Demo,基本上所有讲PorterDuffXferMode 的文章都会使用这张图做说明。如下图所示:

      技术分享图片

 

 

这张图列举了16中PorterDuffXferMode的模式,这也就介绍了 PorterDufferXferMode的基本功能: 控制的是两个图像之间的混合显示模式。

  dst 是先画的图形        src是后画的图形

 

说一下使用的方法: 一般我们在调用canvas.drawXXX() 方法都会传入一个画笔Paint对象,android在绘图时会先检查该画笔Paint对象没有设置Xfermode,那么直接的图形覆盖Canvas对应位置原有的像素;如果设置了Xfermode,那么按照XferMode具体的规则来更新Canvas中对应位置的像素颜色。他的算法在源码中..

  

可以看一个实例来了解一下 该东西的用法

 

 技术分享图片

 

 

效果图:

技术分享图片

 

 

 

画这个圆环的思路是: 先根据每个颜色的比例来画一个充满的圆弧,此时没有设置paint.setXfermode() 方法的,所以他是一个圆 只是有三种不同的圆弧组成。

 

再设置paint.setXfermode(new PorterDufferXfermode(mode.DST_OUT));

这个时候 再画一个内部圆 :

     canvas.drawCircle(center,center,inRadius,paint);
  这个时候图像之间的混合了   并且模式是DST_OUT 所以相同的部分去掉 就达到这样的效果

int st =canvas.saveLayer(rectF,paint);
……………………………….
canvas.restoreToCount(st);
这两句话很重要 一般没有这两句话使用PorterDufferXfermode()可能胡出现不同的结果
 
这两句画的意思是:  比如再ps上新建一个图层,最后那句话是将以前的图层与现在的图层合并在一起。
 
加了这两句话 代表我们的操作是在一个新的图层上进行的。

以上是关于关于PorterDuffXferMode的用法的主要内容,如果未能解决你的问题,请参考以下文章

关于android中图片裁剪以及PorterDuffXfermode的使用经验小结

自定义View——PorterDuffXfermode

利用PorterDuffXfermode绘制图片文字

PorterDuffXfermode的模式取值

Android PorterDuffXfermode简介

PorterDuffXfermode之PorterDuff.Mode.MULTIPLY