JavaTM Platform
Standard Ed. 6

java.awt
クラス AlphaComposite

java.lang.Object
  上位を拡張 java.awt.AlphaComposite
すべての実装されたインタフェース:
Composite

public final class AlphaComposite
extends Object
implements Composite

この AlphaComposite クラスは、グラフィックスとイメージの混合の効果および透明化の効果を実現するために、転送元の色と転送先の色を結合するための基本的なアルファ合成規則を実装します。このクラスで実装される特定の規則は、T. Porter および T. Duff 共著の『Compositing Digital Images』(SIGGRAPH 84, 253〜259) に記述されている一連の基本的な 12 の規則です。 このドキュメントでは、その著書で説明されている定義および概念について、ある程度の知識があることを前提としています。

このクラスは、Porter と Duff によって定義された標準の式を拡張し、係数を 1 つ追加しています。AlphaComposite クラスのインスタンスには、合成式で使用する前に、転送元のピクセルの透明度や範囲を変更できるアルファ値を格納できます。

Porter と Duff の著書で定義された式はすべて、対応するアルファ成分によってあらかじめ乗算された色成分を処理するように定義されています。ColorModel クラスおよび Raster クラスでは、ピクセルデータをあらかじめ乗算された形式でも、乗算されていない形式でも保存できるため、式を適用する前に、すべての入力データをあらかじめ乗算された形式に正規化する必要があり、ピクセル値を格納する前に、すべての結果を転送先によって要求された形式に調整して戻さなければならない可能性があります。

このクラスで定義するのは、純粋な数学的観念における色とアルファ値の合成の式だけです。この式の正確な適用は、データを転送元から取得し、転送先に保存する方法によって異なります。詳細は「実装の注意」を参照してください。

Porter と Duff の著書では、合成式の説明で次の係数が使われています。

係数  定義
As転送元ピクセルのアルファ成分
Csあらかじめ乗算された形式での転送元ピクセルの色成分
Ad転送先ピクセルのアルファ成分
Cdあらかじめ乗算された形式での転送先ピクセルの色成分
Fs転送元ピクセルのうち、出力に関係する部分
Fd転送先ピクセルのうち、出力に関係する部分
Ar結果として得られるアルファ成分
Crあらかじめ乗算された形式での結果の色成分

以上の係数を使用して、Porter と Duff は合成係数 Fs および Fd を選択して、12 種類の目的の視覚効果を生成する 12 通りの方法を定義しています。Fs および Fd を決定する式は、視覚効果を指定する 12 の static フィールドの記述で指定します。たとえば、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転送元ピクセルの raw 色成分の 1 つ
Cdr転送先ピクセルの raw 色成分の 1 つ
AacAlphaComposite インスタンスの「特殊」アルファ成分
Asr転送元ピクセルの raw アルファ成分
Adr転送先ピクセルの raw アルファ成分
Adf転送先に保存される最終アルファ成分
Cdf転送先に保存される最終 raw 色成分

入力の準備

AlphaComposite クラスは、転送元のアルファに適用する追加のアルファ値を定義します。この値は、AlphaComposite のアルファによって raw 転送元アルファと raw 転送元色の両方を乗算して指定されたアルファを持つピクセルに対して、最初に暗黙的な SRC_IN 規則を転送元ピクセルに適用しているかのように適用します。これは、Porter と Duff の合成式で使用されるアルファを生成する次のような式になります。  

        As = Asr * Aac 
転送元 raw 色成分はすべて AlphaComposite インスタンスのアルファで乗算する必要があります。さらに、転送元があらかじめ乗算された形式でない場合に、色成分を転送元アルファで乗算する必要があります。そのため Porter と Duff 式の転送元色成分を生成する式は、転送元ピクセルがあらかじめ乗算されているかどうかによって異なります。  
        Cs = Csr * Asr * Aac     (転送元があらかじめ乗算されていない場合)
        Cs = Csr * Aac           (転送元があらかじめ乗算されている場合) 
転送元アルファを調整する必要はありません。  
        Ad = Adr 

転送先の色成分はあらかじめ乗算された形式でない場合にのみ調整する必要があります。  

        Cd = Cdr * Ad    (転送先があらかじめ乗算されていない場合) 
        Cd = Cdr         (転送先があらかじめ乗算されている場合) 

合成式の適用

調整済みの AsAdCs、および Cd を標準 Porter と Duff 式で使用して、合成係数 Fs および Fd を計算し、次に結果のあらかじめ乗算されている成分 Ar および Cr を計算します。

結果の準備

結果は、あらかじめ乗算されていないデータを格納する転送先バッファーに戻す場合にのみ、次の式を使用して調整する必要があります。  

        Adf = Ar
        Cdf = Cr                 (転送先があらかじめ乗算されている場合)
        Cdf = Cr / Ar            (転送先があらかじめ乗算されていない場合) 
結果として得られるアルファがゼロの場合の除算は定義されていないため、その場合の除算は無視して「ゼロで除算」を避け、色成分はすべてゼロのままにしておきます。

パフォーマンス上の制約

パフォーマンス上の理由のため、AlphaComposite クラスによって作成される CompositeContext オブジェクトの compose メソッドに渡す Raster オブジェクトにはあらかじめ乗算されたデータを使用することをお勧めします。転送元 Raster または転送先 Raster のどちらかがあらかじめ乗算されていない場合、合成処理の前後に適切な変換を行います。

実装の注意

関連項目:
Composite, CompositeContext

フィールドの概要
static AlphaComposite Clear
          1.0f のアルファを持つ、不透明の CLEAR 規則を実装する AlphaComposite オブジェクトです。
static int CLEAR
          転送先の色およびアルファの両方がクリアされます (Porter-Duff Clear 規則)。
static AlphaComposite Dst
          1.0f のアルファを持つ、不透明の DST 規則を実装する AlphaComposite オブジェクトです。
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
          1.0f のアルファを持つ、不透明の DST_ATOP 規則を実装する AlphaComposite オブジェクトです。
static AlphaComposite DstIn
          1.0f のアルファを持つ、不透明の DST_IN 規則を実装する AlphaComposite オブジェクトです。
static AlphaComposite DstOut
          1.0f のアルファを持つ、不透明の DST_OUT 規則を実装する AlphaComposite オブジェクトです。
static AlphaComposite DstOver
          1.0f のアルファを持つ、不透明の DST_OVER 規則を実装する AlphaComposite オブジェクトです。
static AlphaComposite Src
          1.0f のアルファを持つ、不透明の SRC 規則を実装する AlphaComposite オブジェクトです。
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
          1.0f のアルファを持つ、不透明の SRC_ATOP 規則を実装する AlphaComposite オブジェクトです。
static AlphaComposite SrcIn
          1.0f のアルファを持つ、不透明の SRC_IN 規則を実装する AlphaComposite オブジェクトです。
static AlphaComposite SrcOut
          1.0f のアルファを持つ、不透明の SRC_OUT 規則を実装する AlphaComposite オブジェクトです。
static AlphaComposite SrcOver
          1.0f のアルファを持つ、不透明の SRC_OVER 規則を実装する AlphaComposite オブジェクトです。
static AlphaComposite Xor
          1.0f のアルファを持つ、不透明の XOR 規則を実装する AlphaComposite オブジェクトです。
static int XOR
          転送元の転送先の外にある部分が、転送先の転送元の外にある部分と混合されます (Porter-Duff Source Xor Destination 規則)。
 
メソッドの概要
 CompositeContext createContext(ColorModel srcColorModel, ColorModel dstColorModel, RenderingHints hints)
          合成操作のコンテキストを作成します。
 AlphaComposite derive(float alpha)
          指定されたアルファ値を使用する類似の AlphaComposite オブジェクトを返します。
 AlphaComposite derive(int rule)
          指定された合成規則を使用する類似の AlphaComposite オブジェクトを返します。
 boolean equals(Object obj)
          指定したオブジェクトがこの AlphaComposite と同じであるかどうかを判定します。
 float getAlpha()
          この AlphaComposiste のアルファ値を返します。
static AlphaComposite getInstance(int rule)
          指定された規則を使って AlphaComposite オブジェクトを生成します。
static AlphaComposite getInstance(int rule, float alpha)
          指定された規則と転送元のアルファに掛ける定数アルファを使って AlphaComposite オブジェクトを生成します。
 int getRule()
          この AlphaComposite の合成規則を返します。
 int hashCode()
          この合成のハッシュコードを返します。
 
クラス java.lang.Object から継承されたメソッド
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

CLEAR

public static final int CLEAR
転送先の色およびアルファの両方がクリアされます (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
1.0f のアルファを持つ、不透明の CLEAR 規則を実装する AlphaComposite オブジェクトです。

関連項目:
CLEAR

Src

public static final AlphaComposite Src
1.0f のアルファを持つ、不透明の SRC 規則を実装する AlphaComposite オブジェクトです。

関連項目:
SRC

Dst

public static final AlphaComposite Dst
1.0f のアルファを持つ、不透明の DST 規則を実装する AlphaComposite オブジェクトです。

導入されたバージョン:
1.4
関連項目:
DST

SrcOver

public static final AlphaComposite SrcOver
1.0f のアルファを持つ、不透明の SRC_OVER 規則を実装する AlphaComposite オブジェクトです。

関連項目:
SRC_OVER

DstOver

public static final AlphaComposite DstOver
1.0f のアルファを持つ、不透明の DST_OVER 規則を実装する AlphaComposite オブジェクトです。

関連項目:
DST_OVER

SrcIn

public static final AlphaComposite SrcIn
1.0f のアルファを持つ、不透明の SRC_IN 規則を実装する AlphaComposite オブジェクトです。

関連項目:
SRC_IN

DstIn

public static final AlphaComposite DstIn
1.0f のアルファを持つ、不透明の DST_IN 規則を実装する AlphaComposite オブジェクトです。

関連項目:
DST_IN

SrcOut

public static final AlphaComposite SrcOut
1.0f のアルファを持つ、不透明の SRC_OUT 規則を実装する AlphaComposite オブジェクトです。

関連項目:
SRC_OUT

DstOut

public static final AlphaComposite DstOut
1.0f のアルファを持つ、不透明の DST_OUT 規則を実装する AlphaComposite オブジェクトです。

関連項目:
DST_OUT

SrcAtop

public static final AlphaComposite SrcAtop
1.0f のアルファを持つ、不透明の SRC_ATOP 規則を実装する AlphaComposite オブジェクトです。

導入されたバージョン:
1.4
関連項目:
SRC_ATOP

DstAtop

public static final AlphaComposite DstAtop
1.0f のアルファを持つ、不透明の DST_ATOP 規則を実装する AlphaComposite オブジェクトです。

導入されたバージョン:
1.4
関連項目:
DST_ATOP

Xor

public static final AlphaComposite Xor
1.0f のアルファを持つ、不透明の XOR 規則を実装する AlphaComposite オブジェクトです。

導入されたバージョン:
1.4
関連項目:
XOR
メソッドの詳細

getInstance

public static AlphaComposite getInstance(int rule)
指定された規則を使って AlphaComposite オブジェクトを生成します。

パラメータ:
rule - 合成規則
例外:
IllegalArgumentException - ruleCLEARSRCDSTSRC_OVERDST_OVERSRC_INDST_INSRC_OUTDST_OUTSRC_ATOPDST_ATOP、または XOR のいずれでもない場合

getInstance

public static AlphaComposite getInstance(int rule,
                                         float alpha)
指定された規則と転送元のアルファに掛ける定数アルファを使って AlphaComposite オブジェクトを生成します。転送先と合成される前に、転送元は指定されたアルファで乗算されます。

パラメータ:
rule - 合成規則
alpha - 転送元のアルファに掛ける定数アルファ。alpha は、範囲 [0.0, 1.0] (両端を含む) の浮動小数点数値でなければならない
例外:
IllegalArgumentException - 次の条件が成立する場合: alpha が 0.0 より小さいか 1.0 より大きい場合、または ruleCLEARSRCDSTSRC_OVERDST_OVERSRC_INDST_INSRC_OUTDST_OUTSRC_ATOPDST_ATOP、または XOR のいずれでもない場合

createContext

public CompositeContext createContext(ColorModel srcColorModel,
                                      ColorModel dstColorModel,
                                      RenderingHints hints)
合成操作のコンテキストを作成します。コンテキストには、合成操作を実行する場合の状態が設定されます。

定義:
インタフェース Composite 内の createContext
パラメータ:
srcColorModel - 転送元の ColorModel
dstColorModel - 転送先の ColorModel
hints - コンテキストオブジェクトが描画の選択肢を選択するときに使用するヒント
戻り値:
合成操作を実行するために使用される CompositeContext オブジェクト

getAlpha

public float getAlpha()
この AlphaComposiste のアルファ値を返します。この AlphaComposiste がアルファ値を持たない場合は、1.0 が返されます。

戻り値:
この AlphaComposite のアルファ値

getRule

public int getRule()
この AlphaComposite の合成規則を返します。

戻り値:
この AlphaComposite の合成規則

derive

public AlphaComposite derive(int rule)
指定された合成規則を使用する類似の AlphaComposite オブジェクトを返します。指定された合成規則がこのオブジェクトですでに使用されている場合は、このオブジェクトが返されます。

パラメータ:
rule - 合成規則
戻り値:
指定された合成規則を使用する、このオブジェクトから派生した AlphaComposite オブジェクト
例外:
IllegalArgumentException - ruleCLEARSRCDSTSRC_OVERDST_OVERSRC_INDST_INSRC_OUTDST_OUTSRC_ATOPDST_ATOP、または XOR のいずれでもない場合
導入されたバージョン:
1.6

derive

public AlphaComposite derive(float alpha)
指定されたアルファ値を使用する類似の AlphaComposite オブジェクトを返します。指定されたアルファ値がこのオブジェクトですでに使用されている場合は、このオブジェクトが返されます。

パラメータ:
alpha - 転送元のアルファに掛ける定数アルファ。alpha は、範囲 [0.0, 1.0] (両端を含む) の浮動小数点数値でなければならない
戻り値:
指定されたアルファ値を使用する、このオブジェクトから派生した 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 でなく、このオブジェクトと同じ合成規則およびアルファ値を使用する AlphaComposite オブジェクトである場合のみ、結果が true になります。

オーバーライド:
クラス Object 内の equals
パラメータ:
obj - 等しいかどうかが判定される Object
戻り値:
obj がこの AlphaComposite と等しい場合は true、そうでない場合は false
関連項目:
Object.hashCode(), Hashtable

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。