第一次翻譯文章绣檬,不當(dāng)之處請多指教绞蹦。原文鏈接
類繼承結(jié)構(gòu)
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 這個類名是為了表達(dá)對 Thomas Porter 和 Tom Duff 的敬意懊纳,他們于 1984 年發(fā)表了一篇名為 “Compositing Digital Images”(合成數(shù)字圖像)的開創(chuàng)性論文嘀倒。在這篇文章中页藻,兩位作者描述了12種合成操作符软免,具體來說就是當(dāng)我們把原圖像繪制到目標(biāo)圖像處時應(yīng)該如何計(jì)算二者結(jié)合后的顏色周循。
“Compositing Digital Images”(合成數(shù)字圖像)于1984 年 7 月 發(fā)表在計(jì)算機(jī)圖形期刊第18期强法,第3頁。
由于 Porter 和 Duff 的工作只關(guān)注原圖像和目標(biāo)圖像共同繪制對 alpha 通道(即我們所理解的透明度)的影響湾笛,所以我們又把在他們論文所提到的12種操作稱為 alpha 合成模式饮怯。
方便起見,PorterDuff 類中也提供了混合模式嚎研,它們類似于alpha合成模式蓖墅,只不過它們不僅僅是限制在 alpha 通道(RGB可能都有涉及)。Porter 和 Duff 的文章中并沒有涉及到這些混合模式的操作,只不過是為了方便的目的我們才把這些操作包含進(jìn) PorterDuff 這個類中置媳。
圖像
下面所有的圖像示例都是基于相同的原圖像和目標(biāo)圖像
Source image.png
|
Destination image.png
|
---|
下面代碼展示了用于生成每個圖像的繪制順序:
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 合成模式
Source.png
|
Source Over.png
|
Source In.png
|
Source Atop.png
|
---|---|---|---|
Destination.png
|
Destination Over.png
|
Destination In.png
|
Destination Atop.png
|
Clear.png
|
Source Out.png
|
Destination Out.png
|
Exclusive Or.png
|
混合模式
Darken.png
|
Lighten.png
|
Multiply.png
|
---|---|---|
Screen.png
|
Overlay.png
|
合成方程
以下每個單獨(dú)的 alpha 合成或混合模式的文檔提供了計(jì)算原圖像和目標(biāo)圖像合成之后的 alpha 值和顏色值的精確方程于樟。
alpha 的結(jié)果(輸出值)記為顏色的結(jié)果(輸出值)記為
概要
- PorterDuff.Mode
ADD
-
PorterDuff.Mode
CLEAR
被源像素覆蓋的目標(biāo)像素被清除為0
-
PorterDuff.Mode
DARKEN
保留源像素、目標(biāo)像素的較小值 -
PortDuff.Mode
DST
丟棄源像素拇囊,保留目標(biāo)像素
-
PortDuff.Mode
DST_ATOP
丟棄未被源像素覆蓋的目標(biāo)像素
-
PortDuff.Mode
DST_IN
保留覆蓋源像素的目標(biāo)像素迂曲,丟棄剩余的源像素和目標(biāo)像素
-
PortDuff.Mode
DST_OUT
保留未被源像素覆蓋的目標(biāo)像素
-
PortDuff.Mode
DST_OVER
源像素繪制在目標(biāo)像素后面
-
PortDuff.Mode
LIGHTEN
保留源像素、目標(biāo)像素的較小值
-
PortDuff.Mode
MULTIPLY
將源像素和目標(biāo)像素進(jìn)行Multiply(正片疊底)
-
PortDuff.Mode
OVERLAY
像素是進(jìn)行 Multiply(正片疊底)混合還是 Screen(屏幕)混合寥袭,取決于目標(biāo)顏色
-
PortDuff.Mode
SCREEN
將源像素和目標(biāo)像素相加路捧,然后減去乘以目標(biāo)元素的源像素
-
PortDuff.Mode
SRC
只保留源像素
-
PortDuff.Mode
SRC_ATOP
丟棄未覆蓋目標(biāo)像素的源像素
-
PortDuff.Mode
SRC_IN
保持覆蓋目標(biāo)像素的源像素,丟棄剩余的源像素和目標(biāo)像素
-
PortDuff.Mode
SRC_OUT
只保留不包含目標(biāo)像素的源像素
-
PortDuff.Mode
SRC_OVER
源像素繪制在目標(biāo)像素上
-
PortDuff.Mode
XOR
丟棄源像素覆蓋目標(biāo)像素的源像素和目標(biāo)像素CodeCogsEqn (35).png
總結(jié)
其實(shí)整篇下來传黄,也沒有幾個英文單詞杰扫,就是一直粘圖。不過算是一個好的開始膘掰,因?yàn)楣ぷ髦猩婕暗竭@方面的內(nèi)容章姓,算是鞏固總結(jié)啦。順便安利一下這篇個人覺得不錯的文章各個擊破搞明白PorterDuff.Mode