PorterDuff.Mode

参考:http://weishu.me/2015/09/23/Xfermode-in-android/

Sa = Source alpha
Da = Dest alpha
Sc = Source color
Dc = Dst color
如果用叠加的形式看,Dst是下面的图,也就是先画的图;Source是上面的图,也就是后面要画的图。

           

********************************************************************

PorterDuff.Mode ADD Saturate(S + D)

PorterDuff.Mode CLEAR [0, 0]

PorterDuff.Mode DARKEN [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)]

PorterDuff.Mode DST [Da, Dc]

PorterDuff.Mode DST_ATOP [Sa, Sa * Dc + Sc * (1 - Da)]
源图像和目标图像相交处绘制目标图像,不相交的地方绘制源图像,并且相交处的效果会受到源图像和目标图像alpha的影响;

PorterDuff.Mode DST_IN [Sa * Da, Sa * Dc]

在相交的地方绘制DST,但是alpha受SRC影响

PorterDuff.Mode DST_OUT [Da * (1 - Sa), Dc * (1 - Sa)]

PorterDuff.Mode DST_OVER [Sa + (1 - Sa)*Da, Rc = Dc + (1 - Da)*Sc]


PorterDuff.Mode LIGHTEN [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)]

PorterDuff.Mode MULTIPLY [Sa * Da, Sc * Dc]

PorterDuff.Mode OVERLAY

PorterDuff.Mode SCREEN [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc]

PorterDuff.Mode SRC [Sa, Sc]

PorterDuff.Mode SRC_ATOP [Da, Sc * Da + (1 - Sa) * Dc]

源图像和目标图像相交处绘制源图像,不相交的地方绘制目标图像,并且相交处的效果会受到源图像和目标图像alpha的影响;

PorterDuff.Mode SRC_IN [Sa * Da, Sc * Da]

    就是在相交的地方绘制源图像;但是绘制的alpha通道受DST影响

PorterDuff.Mode SRC_OUT [Sa * (1 - Da), Sc * (1 - Da)]

    在不相交的地方绘制源图像,在相交处根据DST的alpha进行过滤

PorterDuff.Mode SRC_OVER [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc]

    从DST上面绘制SRC图像(透明度的叠加)

PorterDuff.Mode XOR [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc]

 在不相交的地方按原样绘制源图像和目标图像,相交的地方受到对应alpha和色值影响

 

原文地址:https://www.cnblogs.com/zengbobo-812796958/p/6070622.html