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つ Aac AlphaCompositeインスタンスの「特殊」アルファ成分 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 (if source is not premultiplied) Cs = Csr * Aac (if source is premultiplied)デスティネーション・アルファを調整する必要はありません。
Ad = Adr
デスティネーションの色成分はあらかじめ乗算された形式でない場合にのみ調整する必要があります。
Cd = Cdr * Ad (if destination is not premultiplied) Cd = Cdr (if destination is premultiplied)
調整済みのAs、Ad、Cs、およびCdを標準PorterとDuff式で使用して、合成係数FsおよびFdを計算し、次に結果のあらかじめ乗算されている成分ArおよびCrを計算します。
結果は、あらかじめ乗算されていないデータを格納するデスティネーション・バッファに戻す場合にのみ、次の式を使用して調整する必要があります。
Adf = Ar Cdf = Cr (if dest is premultiplied) Cdf = Cr / Ar (if dest is not premultiplied)結果として得られるアルファがゼロの場合の除算は定義されていないため、その場合の除算は無視して「ゼロで除算」を避け、色成分はすべてゼロのままにしておきます。
パフォーマンス上の理由のため、AlphaComposite
クラスによって作成されるCompositeContext
オブジェクトのcompose
メソッドに渡すRaster
オブジェクトには、あらかじめ乗算されたデータを使用することをお薦めします。ソースRaster
またはデスティネーションRaster
のどちらかがあらかじめ乗算されていない場合、合成処理の前後に適切な変換を行います。
BufferedImage
クラスに挙げられた不透明イメージの一部の種類など、ソースでピクセルのアルファ値を格納していない場合が多くあります。そうしたソースにはすべてのピクセルに1.0のアルファを指定します。
BufferedImage.TYPE_BYTE_INDEXED
は合成処理のデスティネーションとして使用すべきではありません。限定されたパレットからピクセルを選択して、合成式の結果に合わせる必要があるため、すべての処理で大きな誤差が生じる可能性があるからです。
一般に、整数0は浮動小数点値0.0と同等とみなされ、整数2^n-1 (nは表現のビット数)は1.0と同等とみなされるように、整数値が浮動小数点値と関連付けられます。8ビット表現では、0x00は0.0を表し、0xffは1.0を表します。
(A, R, G, B) = (0x01, 0xb0, 0x00, 0x00)
整数値演算を使用し、この値がSRC
モードで、特殊アルファを使用せずに結合されている場合、数値演算の結果は(整数形式で)次のようになります。
(A, R, G, B) = (0x01, 0x01, 0x00, 0x00)
中間値は常にあらかじめ乗算された形式であり、整数値の赤の成分は0x00または0x01のどちらかのみになります。この結果をあらかじめ乗算されていないデスティネーションに戻そうとする場合、アルファを除算すると、あらかじめ乗算されていない赤の値の選択肢はほとんどありません。この場合、ショートカットなしで、整数スペースで数値演算を実行する実装の最終的なピクセル値は次のようになります。
(A, R, G, B) = (0x01, 0xff, 0x00, 0x00)
(0x01を0x01で除算すると1.0になり、これは8ビット格納形式での値0xffに等しくなります。)
または、浮動小数点演算を使用する実装では、より正確な結果が生成され、ほとんど丸め誤差のない元のピクセル値に戻ります。あるいは、整数値演算を使用する実装では、浮動小数点スペースで実行した場合に、式は色値の仮想NOPになるため、無修正のピクセルをデスティネーションに転送でき、すべての数値演算を避けることができます。
これらの実装はすべて同じ式に従おうとしますが、整数と小数点数値演算、および短縮した式と完全な式のさまざまなトレードオフが必要です。そうした違いを相殺するため、あらかじめ乗算された結果の形式が実装とイメージ形式で一致していることのみを期待することがもっとも望ましいと考えられます。この場合、あらかじめ乗算された形式で表された両方の答えが次に等しくなります。
(A, R, G, B) = (0x01, 0x01, 0x00, 0x00)
したがって、それらはすべて一致します。
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()
この
AlphaComposite のアルファ値を返します。 |
static AlphaComposite |
getInstance(int rule)
指定されたルールを使用して
AlphaComposite オブジェクトを作成します。 |
static AlphaComposite |
getInstance(int rule, float alpha)
指定されたルールと、ソースのアルファに掛ける定数アルファを使用して
AlphaComposite オブジェクトを作成します。 |
int |
getRule()
この
AlphaComposite の合成ルールを返します。 |
int |
hashCode()
この合成のハッシュ・コードを返します。
|
@Native public static final int CLEAR
Fs = 0およびFd = 0の場合、次のようになります。
Ar = 0 Cr = 0
@Native public static final int SRC
Fs = 1およびFd = 0の場合、次のようになります。
Ar = As Cr = Cs
@Native public static final int DST
Fs = 0およびFd = 1の場合、次のようになります。
Ar = Ad Cr = Cd
@Native public static final int SRC_OVER
Fs = 1およびFd =(1-As)の場合、次のようになります。
Ar = As + Ad*(1-As) Cr = Cs + Cd*(1-As)
@Native public static final int DST_OVER
Fs =(1-Ad)およびFd = 1の場合、次のようになります。
Ar = As*(1-Ad) + Ad Cr = Cs*(1-Ad) + Cd
@Native public static final int SRC_IN
Fs = Ad、Fd = 0の場合、次のようになります。
Ar = As*Ad Cr = Cs*Ad
@Native public static final int DST_IN
Fs = 0、Fd = Asの場合、次のようになります。
Ar = Ad*As Cr = Cd*As
@Native public static final int SRC_OUT
Fs =(1-Ad)およびFd = 0の場合、次のようになります。
Ar = As*(1-Ad) Cr = Cs*(1-Ad)
@Native public static final int DST_OUT
Fs = 0およびFd =(1-As)の場合、次のようになります。
Ar = Ad*(1-As) Cr = Cd*(1-As)
@Native public static final int SRC_ATOP
Fs = Ad、Fd =(1-As)の場合、次のようになります。
Ar = As*Ad + Ad*(1-As) = Ad Cr = Cs*Ad + Cd*(1-As)
@Native public static final int DST_ATOP
Fs =(1-Ad)、Fd = Asの場合、次のようになります。
Ar = As*(1-Ad) + Ad*As = As Cr = Cs*(1-Ad) + Cd*As
@Native public static final int XOR
Fs =(1-Ad)、Fd =(1-As)の場合、次のようになります。
Ar = As*(1-Ad) + Ad*(1-As) Cr = Cs*(1-Ad) + Cd*(1-As)
public static final AlphaComposite Clear
AlphaComposite
オブジェクト。CLEAR
public static final AlphaComposite Src
AlphaComposite
オブジェクト。SRC
public static final AlphaComposite Dst
AlphaComposite
オブジェクト。DST
public static final AlphaComposite SrcOver
AlphaComposite
オブジェクト。SRC_OVER
public static final AlphaComposite DstOver
AlphaComposite
オブジェクト。DST_OVER
public static final AlphaComposite SrcIn
AlphaComposite
オブジェクト。SRC_IN
public static final AlphaComposite DstIn
AlphaComposite
オブジェクト。DST_IN
public static final AlphaComposite SrcOut
AlphaComposite
オブジェクト。SRC_OUT
public static final AlphaComposite DstOut
AlphaComposite
オブジェクト。DST_OUT
public static final AlphaComposite SrcAtop
AlphaComposite
オブジェクト。SRC_ATOP
public static final AlphaComposite DstAtop
AlphaComposite
オブジェクト。DST_ATOP
public static final AlphaComposite Xor
AlphaComposite
オブジェクト。XOR
public static AlphaComposite getInstance(int rule)
AlphaComposite
オブジェクトを作成します。public static AlphaComposite getInstance(int rule, float alpha)
AlphaComposite
オブジェクトを作成します。デスティネーションと合成される前に、ソースは指定されたアルファで乗算されます。public CompositeContext createContext(ColorModel srcColorModel, ColorModel dstColorModel, RenderingHints hints)
createContext
、インタフェース: Composite
srcColorModel
- ソースのColorModel
dstColorModel
- デスティネーションのColorModel
hints
- コンテキスト・オブジェクトが描画の選択肢の中から選択するために使用するヒントCompositeContext
オブジェクトpublic float getAlpha()
AlphaComposite
のアルファ値を返します。このAlphaComposite
がアルファ値を持たない場合は、1.0が返されます。AlphaComposite
のアルファ値public int getRule()
AlphaComposite
の合成ルールを返します。AlphaComposite
の合成ルールpublic AlphaComposite derive(int rule)
AlphaComposite
オブジェクトを返します。指定された合成ルールがこのオブジェクトですでに使用されている場合は、このオブジェクトが返されます。public AlphaComposite derive(float alpha)
AlphaComposite
オブジェクトを返します。指定されたアルファ値がこのオブジェクトですでに使用されている場合は、このオブジェクトが返されます。alpha
- ソースのアルファに掛ける定数アルファ。alpha
は、[0.0, 1.0]の範囲(両端を含む)の浮動小数点数値である必要があります。AlphaComposite
オブジェクトIllegalArgumentException
- alpha
が0.0未満か1.0より大きい場合public int hashCode()
hashCode
、クラス: Object
Object.equals(java.lang.Object)
, System.identityHashCode(java.lang.Object)
public boolean equals(Object obj)
AlphaComposite
に等しいかどうかを判定します。
引数がnull
でなく、このオブジェクトと同じ合成ルールおよびアルファ値を使用するAlphaComposite
オブジェクトである場合のみ、結果がtrue
になります。
equals
、クラス: Object
obj
- 等しいかどうかが判定されるObject
obj
がこのAlphaComposite
と等しい場合はtrue
、そうでない場合はfalse
Object.hashCode()
, HashMap
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.