PorterDuff

2022-07-19  本文已影响0人  xiaoluo

PorterDuffColorFilter
PorterDuffColorFilter(int color, PorterDuff.Mode mode)
这个构造方法也接受两个值,一个是16进制表示的颜色值这个很好理解,而另一个是PorterDuff内部类Mode中的一个常量值,这个值表示混合模式。那么什么是混合模式呢?混合混合必定是有两种东西混才行,第一种就是我们设置的color值而第二种当然就是我们画布上的元素了!,比如这里我们把Color的值设为红色,而模式设为PorterDuff.Mode.DARKEN变暗:

mPaint.setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.DARKEN));

Porter 和 Duff 的工作只关注源和目标的 alpha 通道的效果,所以原论文中描述的 12 种操作符在这里被称为 alpha 合成模式。

为方便起见,该类还提供了几种Blending mode,它们类似地定义了合成源和目标的结果,但不受 Alpha 通道的限制。这些混合模式不是由 Porter 和 Duff 定义的,但为方便起见已包含在此PorterDuffMode中。

总结:PorterDuff.Mode中的模式不仅仅是应用于图像色彩混合,还应用于图形混合,比如PorterDuff.Mode.DST_OUT就表示裁剪混合图,如果在PorterDuffColorFilter中强行设置这些图形混合的模式将不会看到任何对应的效果。

PorterDuffMode提供的几种图像色彩和图形混合模式

这18种模式Android还为我们提供了它们的计算方式比如LIGHTEN的计算方式为[Sa + Da - SaDa, Sc(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)],

\color{red} {Sa全称为Source alpha表示源图的Alpha通道;}

\color{red} {Sc全称为Source color表示源图的颜色;}

\color{red} {Da全称为Destination alpha表示目标图的Alpha通道;}

\color{red} {Dc全称为Destination color表示目标图的颜色}

“[……]”里分为两部分,其中“,”前的部分为“Sa + Da - SaDa”这一部分的值代表计算后的Alpha通道而“,”后的部分为“Sc(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)”这一部分的值代表计算后的颜色值。

ADD:ADD模式简单来说就是对图像饱和度进行相加

PorterDuff.Mode.DST_ATOP
计算方式:[Sa, Sa * Dc + Sc * (1 - Da)];Chinese:在源图像和目标图像相交的地方绘制目标图像而在不相交的地方绘制源图像

参考链接:https://blog.csdn.net/aigestudio/article/details/41316141
https://developer.android.com/reference/android/graphics/PorterDuff.Mode

上一篇下一篇

猜你喜欢

热点阅读