Xfermode入门

基础

        Xfermode一共有三个子类AvoidXfermode,PixelXorXfermode及PorterDuffXfermode。

AvoidXfermode

        不支持硬件加速,已过时。构造方法如下:public AvoidXfermode(int opColor, int tolerance, Mode mode)。第一参数是目标颜色值,第二个是容差,第三个是模式(AvoidXfermode.MODE.AVOID和AvoidXfermode.MODE.TARGET)。它的主要作用可以概括为:根据模式,在目标颜色值上画或者不画Paint.setColor()为Paint设置的颜色值

        MODE.TARGET:目标。与opColor相差在tolerance内的颜色上会被画上Paint的颜色值。

        MODE.AVOID:避免。tolerance的意义也和TARGET不一样。tolerance为0时,那和opColor有一点相似都不会被画上Paint的颜色;tolerance为255时,只要和opColor有一点不一样,那就会被画上Paint的颜色值。

PorterDuffXfermode

        它是Xfermode子类之一。在使用Paint.setXfermode()时,传入的参数经常是PorterDuffXfermode的对象。如下:

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XXX));

PorterDuff.Mode

        PorterDuff.Mode有十六个值,分别代表不同的效果,应根据需要传入到PorterDuffXfermode()的构造器中。其中的每一个值都是对src与dst的每一个像点的颜色值进行操作。src指前景、上层,后绘制上的;dst指后景、下层,先绘制上去的。

        其实每一个值都是按一定的规则对像素点的颜色值进行加减乘除操作。但,千万不要用数学计算去套这些模式的操作结果,因为数学计算的结果和显示的颜色值是有一定的差别的。但,可以按数学计算公式去估算每一个模式中颜色值的大致变化。

CLEAR

        [0,0]

        清除画布上DST所占区域的的所有像素值。如Canvas#drawColor(Color.BLACK,Mode.CLEAR)将画布上的所有内容清除掉。

SRC

        [Sa,Sc]

        显示上层绘制的图片。

DST

        [Da, Dc]

        显示下层绘制的图片。

SRC_OVER

        [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc]

DST_OVER

        [Sa + (1 - Sa)*Da, Rc = Dc + (1 - Da)*Sc]

SRC_IN

        [Sa * Da, Sc * Da]

DST_IN

        [Sa * Da, Sa * Dc]

SRC_OUT

        [Sa * (1 - Da), Sc * (1 - Da)]

        相交部分按公式计算,非相交部分则各保持原样。

DST_OUT

        [Da * (1 - Sa), Dc * (1 - Sa)]

        相交部分按计算公式计算,DST中非相交部分保持原样。

SRC_ATOP

        [Da, Sc * Da + (1 - Sa) * Dc]

        显示下层,但相交的部分显示上层。

DST_ATOP

        [Sa, Sa * Dc + Sc * (1 - Da)]

        按公式计算。如两个都不透明,则相交的部分显示的为Dc。

XOR

        [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc]

        相交部分,按公式计算。公式中,如果两个都不透明的话,最终什么都不会显示。

DARKEN

        [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)]

        相交部分按数学公式进行计算即可。

LIGHTEN

        [Sa + Da - Sa*Da,Sc*(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)]

        相交部分按数学公式进行计算即可。

MULTIPLY

        [Sa * Da, Sc * Dc]

        相交部分颜色相乘,得到的结果除以255就是最终的颜色。等效于ps中的正片叠底效果。

SCREEN 

        [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc]

        相交部分按上述公式计算即可。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值