JavaTM 2 Platform
Standard Ed. 6

java.awt
類別 AlphaComposite

java.lang.Object
  繼承者 java.awt.AlphaComposite
所有已實作的介面:
Composite

public final class AlphaComposite
extends Object
implements Composite

AlphaComposite 類別實作一些基本的 alpha 合成規則,將源色與目標色組合,在圖形和圖像中實作混合和透明效果。此類別實作的特定規則是 T. Porter 和 T. Duff 合著的 "Compositing Digital Images", SIGGRAPH 84, 253-259 中描述的 12 條基本規則集。本文檔的其餘部分假定讀者熟悉上述論文中概括的定義和概念。

此類別擴展了 Porter 和 Duff 定義的方程,包含一個額外的因子。AlphaComposite 類別的實例可以包含一個 alpha 值,在將該值用於混合方程之前,可以用它來修改不透明度和每個源像素的覆寫率。

要重點注意的是,Porter 和 Duff 的論文中定義的方程完全是為顏色份量方面的操作定義的,這些顏色份量都要用它們對應的 alpha 份量預乘。因為 ColorModelRaster 類別允許以預乘和非預乘的方式存儲像素資料,所以在將所有輸入資料應用到方程之前,必須將它們標準化為預乘形式,並且在存儲像素值之前,可能需要將所有結果都調整回目標所需的形式。

還要注意的是,此類別只定義了以純數學方式組合顏色和 alpha 值的方程。方程的具體應用取決於從資料源中檢索資料和將它們存儲到其目標中的方式。有關更多資訊,請參閱實作警告事項

Porter 和 Duff 的論文在混合方程的描述中使用了以下因子:

因子  定義
As源像素的 alpha 份量
Cs源像素的預乘形式的顏色份量
Ad目標像素的 alpha 份量
Cd目標像素的預乘形式的顏色份量
Fs用於輸出的源像素的分數值
Fd用於輸出的目標像素的分數值
Ar結果 alpha 份量
Cr結果預乘形式的顏色份量

使用這些因子,Porter 和 Duff 定義了 12 種選擇混合因子 FsFd 的方法,從而產生了 12 種令人滿意的可視效果。在對 12 個指定可視效果的靜態欄位的描述中,給出了具有確定 FsFd 值的方程。例如,對 SRC_OVER 的描述指定了 Fs = 1 和 Fd = (1-As)。一旦已知一組確定混合因子的方程,就可以使用以下方程組將它們應用於每個像素以產生結果:

        Fs = f(Ad)
        Fd = f(As)
        Ar = As*Fs + Ad*Fd
        Cr = Cs*Fs + Cd*Fd

在我們對 Porter 和 Duff 論文混合方程的擴展中,用到了以下因子:

因子  定義
Csr源像素的原始顏色份量之一
Cdr目標像素的原始顏色份量之一
Aac取自 AlphaComposite 實例的“額外的”alpha 份量
Asr源像素的原始 alpha 份量
Adr目標像素的原始 alpha 份量
Adf目標中存儲的最終 alpha 份量
Cdf目標中存儲的最終原始顏色份量

準備輸入

AlphaComposite 類別定義一個應用於源 alpha 的額外 alpha 值。應用此值就好像首先將隱式的 SRC_IN 規則應用於源像素(通過將原始源 alpha 和原始源色乘以 AlphaComposite 中的 alpha 值獲得),而不是應用於具有指定 alpha 值的像素。這產生了以下方程,該方程產生 Porter 和 Duff 的混合方程中使用的 alpha 值:

        As = Asr * Aac 
所有這些原始源色份量都必須乘以 AlphaComposite 實例中的 alpha 值。此外,如果源色份量不是預乘形式的,那麼還需要將顏色份量乘以源 alpha 值。因此,用來產生 Porter 和 Duff 方程源色份量的方程取決於源像素是否已經被預乘:
        Cs = Csr * Asr * Aac     (如果源像素沒有被預乘)
        Cs = Csr * Aac           (如果源像素被預乘) 
無需對目標 alpha 進行調整:
        Ad = Adr 

僅當目標色份量不是預乘形式時,才需要對它們進行調整:

        Cd = Cdr * Ad    (如果目標色份量沒有被預乘)
        Cd = Cdr         (如果目標色份量被預乘) 

應用混合方程

調整後的 AsAdCsCd 將用於標準的 Porter 和 Duff 方程,以計算混合因子 FsFd,然後計算得到的預乘份量 ArCr

準備結果

僅當結果要存儲回保存未預乘資料的目標緩衝區時,才需要使用以下方程調整結果:

        Adf = Ar
        Cdf = Cr                 (如果目標資料被預乘)
        Cdf = Cr / Ar            (如果目標資料沒有被預乘) 
注意,在所得 alpha 為零時除法是不明確的,所以在這種情況下會忽略除法以避免“除以零”的情況,此時顏色份量都將為零。

性能考慮事項

出於性能方面的原因,傳遞給 CompositeContext 物件(由 AlphaComposite 類別創建) compose 方法的 Raster 物件最好有預乘資料。不過,如果源 Raster 或目標 Raster 沒有被預乘,那麼可以在合成操作之前或之後執行適當的轉換。

實作警告事項

另請參見:
Composite, CompositeContext

欄位摘要
static AlphaComposite Clear
          實作不透明 CLEAR 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。
static int CLEAR
          目標色和目標 alpha 值都被清除(Porter-Duff Clear 規則)。
static AlphaComposite Dst
          實作不透明 DST 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。
static int DST
          目標色不變(Porter-Duff Destination 規則)。
static int DST_ATOP
          在源色之上合成源色中的目標色部分,並將替換目標色(Porter-Duff Destination Atop Source 規則)。
static int DST_IN
          源色中的目標色部分將替換目標色(Porter-Duff Destination In Source 規則)。
static int DST_OUT
          源色以外的目標色部分將替換目標色(Porter-Duff Destination Held Out By Source 規則)。
static int DST_OVER
          在源色之上合成目標色,產生的結果將替代目標色(Porter-Duff Destination Over Source 規則)。
static AlphaComposite DstAtop
          實作不透明 DST_ATOP 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。
static AlphaComposite DstIn
          實作不透明 DST_IN 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。
static AlphaComposite DstOut
          實作不透明 DST_OUT 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。
static AlphaComposite DstOver
          實作不透明 DST_OVER 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。
static AlphaComposite Src
          實作不透明 SRC 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。
static int SRC
          將源色複製到目標色(Porter-Duff Source 規則)。
static int SRC_ATOP
          目標色中的源色部分將被合成到目標色中(Porter-Duff Source Atop Destination 規則)。
static int SRC_IN
          目標色中的源色部分將替換目標色(Porter-Duff Source In Destination 規則)。
static int SRC_OUT
          目標色以外的源色部分將替換目標色(Porter-Duff Source Held Out By Destination 規則)。
static int SRC_OVER
          在目標色之上合成源色(Porter-Duff Source Over Destination 規則)。
static AlphaComposite SrcAtop
          實作不透明 SRC_ATOP 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。
static AlphaComposite SrcIn
          實作不透明 SRC_IN 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。
static AlphaComposite SrcOut
          實作不透明 SRC_OUT 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。
static AlphaComposite SrcOver
          實作不透明 SRC_OVER 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。
static AlphaComposite Xor
          實作不透明 XOR 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。
static int XOR
          將目標色之外的源色部分與源色之外的目標色部分結合到一起(Porter-Duff Source Xor Destination 規則)。
 
方法摘要
 CompositeContext createContext(ColorModel srcColorModel, ColorModel dstColorModel, RenderingHints hints)
          為合成操作創建一個上下文。
 AlphaComposite derive(float alpha)
          返回一個類似的 AlphaComposite 物件,該物件使用指定的 alpha 值。
 AlphaComposite derive(int rule)
          返回一個類似的 AlphaComposite 物件,該物件使用指定的復合規則。
 boolean equals(Object obj)
          確定指定的物件是否等於此 AlphaComposite
 float getAlpha()
          返回此 AlphaComposite 的 alpha 值。
static AlphaComposite getInstance(int rule)
          創建一個具有指定規則的 AlphaComposite 物件。
static AlphaComposite getInstance(int rule, float alpha)
          創建一個 AlphaComposite 物件,它具有指定的規則和用來乘源色 alpha 值的常數 alpha 值。
 int getRule()
          返回此 AlphaComposite 的合成規則。
 int hashCode()
          返回此合成的雜湊碼。
 
從類別 java.lang.Object 繼承的方法
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

CLEAR

public static final int CLEAR
目標色和目標 alpha 值都被清除(Porter-Duff Clear 規則)。源色和目標色都不被用作輸入。

Fs = 0 和 Fd = 0,因此:

        Ar = 0
        Cr = 0

另請參見:
常數欄位值

SRC

public static final int SRC
將源色複製到目標色(Porter-Duff Source 規則)。目標色不被用作輸入。

Fs = 1 和 Fd = 0,因此:

        Ar = As
        Cr = Cs

另請參見:
常數欄位值

DST

public static final int DST
目標色不變(Porter-Duff Destination 規則)。

Fs = 0 和 Fd = 1,因此:

        Ar = Ad
        Cr = Cd

從以下版本開始:
1.4
另請參見:
常數欄位值

SRC_OVER

public static final int SRC_OVER
在目標色之上合成源色(Porter-Duff Source Over Destination 規則)。

Fs = 1 和 Fd = (1-As),因此:

        Ar = As + Ad*(1-As)
        Cr = Cs + Cd*(1-As)

另請參見:
常數欄位值

DST_OVER

public static final int DST_OVER
在源色之上合成目標色,產生的結果將替代目標色(Porter-Duff Destination Over Source 規則)。

Fs = (1-Ad) 和 Fd = 1,因此:

        Ar = As*(1-Ad) + Ad
        Cr = Cs*(1-Ad) + Cd

另請參見:
常數欄位值

SRC_IN

public static final int SRC_IN
目標色中的源色部分將替換目標色(Porter-Duff Source In Destination 規則)。

Fs = AdFd = 0,因此:

        Ar = As*Ad
        Cr = Cs*Ad

另請參見:
常數欄位值

DST_IN

public static final int DST_IN
源色中的目標色部分將替換目標色(Porter-Duff Destination In Source 規則)。

Fs = 0 和 Fd = As,因此:

        Ar = Ad*As
        Cr = Cd*As

另請參見:
常數欄位值

SRC_OUT

public static final int SRC_OUT
目標色以外的源色部分將替換目標色(Porter-Duff Source Held Out By Destination 規則)。

Fs = (1-Ad) 和 Fd = 0,因此:

        Ar = As*(1-Ad)
        Cr = Cs*(1-Ad)

另請參見:
常數欄位值

DST_OUT

public static final int DST_OUT
源色以外的目標色部分將替換目標色(Porter-Duff Destination Held Out By Source 規則)。

Fs = 0 和 Fd = (1-As),因此:

        Ar = Ad*(1-As)
        Cr = Cd*(1-As)

另請參見:
常數欄位值

SRC_ATOP

public static final int SRC_ATOP
目標色中的源色部分將被合成到目標色中(Porter-Duff Source Atop Destination 規則)。

Fs = AdFd = (1-As),因此:

        Ar = As*Ad + Ad*(1-As) = Ad
        Cr = Cs*Ad + Cd*(1-As)

從以下版本開始:
1.4
另請參見:
常數欄位值

DST_ATOP

public static final int DST_ATOP
在源色之上合成源色中的目標色部分,並將替換目標色(Porter-Duff Destination Atop Source 規則)。

Fs = (1-Ad) 和 Fd = As,因此:

        Ar = As*(1-Ad) + Ad*As = As
        Cr = Cs*(1-Ad) + Cd*As

從以下版本開始:
1.4
另請參見:
常數欄位值

XOR

public static final int XOR
將目標色之外的源色部分與源色之外的目標色部分結合到一起(Porter-Duff Source Xor Destination 規則)。

Fs = (1-Ad) 和 Fd = (1-As),因此:

        Ar = As*(1-Ad) + Ad*(1-As)
        Cr = Cs*(1-Ad) + Cd*(1-As)

從以下版本開始:
1.4
另請參見:
常數欄位值

Clear

public static final AlphaComposite Clear
實作不透明 CLEAR 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。

另請參見:
CLEAR

Src

public static final AlphaComposite Src
實作不透明 SRC 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。

另請參見:
SRC

Dst

public static final AlphaComposite Dst
實作不透明 DST 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。

從以下版本開始:
1.4
另請參見:
DST

SrcOver

public static final AlphaComposite SrcOver
實作不透明 SRC_OVER 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。

另請參見:
SRC_OVER

DstOver

public static final AlphaComposite DstOver
實作不透明 DST_OVER 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。

另請參見:
DST_OVER

SrcIn

public static final AlphaComposite SrcIn
實作不透明 SRC_IN 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。

另請參見:
SRC_IN

DstIn

public static final AlphaComposite DstIn
實作不透明 DST_IN 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。

另請參見:
DST_IN

SrcOut

public static final AlphaComposite SrcOut
實作不透明 SRC_OUT 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。

另請參見:
SRC_OUT

DstOut

public static final AlphaComposite DstOut
實作不透明 DST_OUT 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。

另請參見:
DST_OUT

SrcAtop

public static final AlphaComposite SrcAtop
實作不透明 SRC_ATOP 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。

從以下版本開始:
1.4
另請參見:
SRC_ATOP

DstAtop

public static final AlphaComposite DstAtop
實作不透明 DST_ATOP 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。

從以下版本開始:
1.4
另請參見:
DST_ATOP

Xor

public static final AlphaComposite Xor
實作不透明 XOR 規則的 AlphaComposite 物件,具有 1.0f 的 alpha 值。

從以下版本開始:
1.4
另請參見:
XOR
方法詳細資訊

getInstance

public static AlphaComposite getInstance(int rule)
創建一個具有指定規則的 AlphaComposite 物件。

參數:
rule - 合成規則
拋出:
IllegalArgumentException - 如果 rule 不是以下規則之一:CLEARSRCDSTSRC_OVERDST_OVERSRC_INDST_INSRC_OUTDST_OUTSRC_ATOPDST_ATOPXOR

getInstance

public static AlphaComposite getInstance(int rule,
                                         float alpha)
創建一個 AlphaComposite 物件,它具有指定的規則和用來乘源色 alpha 值的常數 alpha 值。在將源色與目標色合成前,要將源色乘以指定的 alpha 值。

參數:
rule - 合成規則
alpha - 將乘源色的 alpha 值的常數 alpha 值。alpha 必須是範圍 [0.0, 1.0] 之內(包含邊界值)的一個浮點數字。
拋出:
IllegalArgumentException - 如果 alpha 小於 0.0 或大於 1.0,或者 rule 是以下規則之一:CLEARSRCDSTSRC_OVERDST_OVERSRC_INDST_INSRC_OUTDST_OUTSRC_ATOPDST_ATOPXOR

createContext

public CompositeContext createContext(ColorModel srcColorModel,
                                      ColorModel dstColorModel,
                                      RenderingHints hints)
為合成操作創建一個上下文。上下文中包括執行合成操作過程中使用的狀態。

指定者:
介面 Composite 中的 createContext
參數:
srcColorModel - 源色的 ColorModel
dstColorModel - 目標色的 ColorModel
hints - 上下文物件用於選擇呈現方法的提示
返回:
用來執行合成操作的 CompositeContext 物件。

getAlpha

public float getAlpha()
返回此 AlphaComposite 的 alpha 值。如果此 AlphaComposite 沒有 alpha 值,則返回 1.0。

返回:
AlphaComposite 的 alpha 值。

getRule

public int getRule()
返回此 AlphaComposite 的合成規則。

返回:
AlphaComposite 的合成規則。

derive

public AlphaComposite derive(int rule)
返回一個類似的 AlphaComposite 物件,該物件使用指定的復合規則。如果此物件已經使用指定的復合規則,則返回此物件。

參數:
rule - 復合規則
返回:
派生於使用指定復合規則的物件的 AlphaComposite 物件。
拋出:
IllegalArgumentException - 如果 rule 不是以下規則之一: CLEARSRCDSTSRC_OVERDST_OVERSRC_INDST_INSRC_OUTDST_OUTSRC_ATOPDST_ATOPXOR
從以下版本開始:
1.6

derive

public AlphaComposite derive(float alpha)
返回一個類似的 AlphaComposite 物件,該物件使用指定的 alpha 值。如果此物件已經具有指定的 alpha 值,則返回此物件。

參數:
alpha - 常數 alpha,將乘以源的 alpha 值。alpha 必須是閉區間 [0.0, 1.0] 中的一個浮點數字。
返回:
派生於使用指定 alpha 值的物件的 AlphaComposite 物件。
拋出:
IllegalArgumentException - 如果 alpha 小於 0.0 或大於 1.0
從以下版本開始:
1.6

hashCode

public int hashCode()
返回此合成的雜湊碼。

覆寫:
類別 Object 中的 hashCode
返回:
此合成的雜湊碼。
另請參見:
Object.equals(java.lang.Object), Hashtable

equals

public boolean equals(Object obj)
確定指定的物件是否等於此 AlphaComposite

當且僅當參數不為 null,並且是一個與此物件具有相同組合規則和 alpha 值的 AlphaComposite 物件時,結果才為 true

覆寫:
類別 Object 中的 equals
參數:
obj - 要測試相等性的 Object
返回:
如果 obj 等於此 AlphaComposite,則返回 true;否則返回 false
另請參見:
Object.hashCode(), Hashtable

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only