第一次翻译文章,不当之处请多指教。原文链接
类继承结构
public static final enum PorterDuff.Mode
extends Enum<PorterDuff.Mode>
java.lang.Object
↳ java.lang.Enum<android.graphics.PorterDuff.Mode>
↳ android.graphics.PorterDuff.Mode
Porter-Duff
Porter-Duff 这个类名是为了表达对 Thomas Porter 和 Tom Duff 的敬意,他们于 1984 年发表了一篇名为 “Compositing Digital Images”(合成数字图像)的开创性论文。在这篇文章中,两位作者描述了12种合成操作符,具体来说就是当我们把原图像绘制到目标图像处时应该如何计算二者结合后的颜色。
“Compositing Digital Images”(合成数字图像)于1984 年 7 月 发表在计算机图形期刊第18期,第3页。
由于 Porter 和 Duff 的工作只关注原图像和目标图像共同绘制对 alpha 通道(即我们所理解的透明度)的影响,所以我们又把在他们论文所提到的12种操作称为 alpha 合成模式。
方便起见,PorterDuff 类中也提供了混合模式,它们类似于alpha合成模式,只不过它们不仅仅是限制在 alpha 通道(RGB可能都有涉及)。Porter 和 Duff 的文章中并没有涉及到这些混合模式的操作,只不过是为了方便的目的我们才把这些操作包含进 PorterDuff 这个类中。
图像
下面所有的图像示例都是基于相同的原图像和目标图像
下面代码展示了用于生成每个图像的绘制顺序:
Paint paint = new Paint();
canvas.drawBitmap(destinationImage, 0, 0, paint);
PorterDuff.Mode mode = // choose a mode
paint.setXfermode(new PorterDuffXfermode(mode));
canvas.drawBitmap(sourceImage, 0, 0, paint);
Alpha 合成模式
混合模式
合成方程
以下每个单独的 alpha 合成或混合模式的文档提供了计算原图像和目标图像合成之后的 alpha 值和颜色值的精确方程。
alpha 的结果(输出值)记为颜色的结果(输出值)记为
概要
- PorterDuff.Mode
ADD
-
PorterDuff.Mode
CLEAR
-
PorterDuff.Mode
DARKEN
-
PortDuff.Mode
DST
-
PortDuff.Mode
DST_ATOP
-
PortDuff.Mode
DST_IN
-
PortDuff.Mode
DST_OUT
-
PortDuff.Mode
DST_OVER
-
PortDuff.Mode
LIGHTEN
-
PortDuff.Mode
MULTIPLY
-
PortDuff.Mode
OVERLAY
-
PortDuff.Mode
SCREEN
-
PortDuff.Mode
SRC
-
PortDuff.Mode
SRC_ATOP
-
PortDuff.Mode
SRC_IN
-
PortDuff.Mode
SRC_OUT
-
PortDuff.Mode
SRC_OVER
-
PortDuff.Mode
XOR
总结
其实整篇下来,也没有几个英文单词,就是一直粘图。不过算是一个好的开始,因为工作中涉及到这方面的内容,算是巩固总结啦。顺便安利一下这篇个人觉得不错的文章各个击破搞明白PorterDuff.Mode