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 (ソースがあらかじめ乗算されていない場合) Cs = Csr * Aac (ソースがあらかじめ乗算されている場合)デスティネーションアルファを調整する必要はありません。
Ad = Adr
デスティネーションの色成分はあらかじめ乗算された形式でない場合にのみ調整する必要があります。
Cd = Cdr * Ad (デスティネーションがあらかじめ乗算されていない場合) Cd = Cdr (デスティネーションがあらかじめ乗算されている場合)
調整済みの As、Ad、Cs、および Cd を標準 Porter と Duff 式で使用して、合成係数 Fs および Fd を計算し、次に結果のあらかじめ乗算されている成分 Ar および Cr を計算します。
結果は、あらかじめ乗算されていないデータを格納するデスティネーションバッファーに戻す場合にのみ、次の式を使用して調整する必要があります。
Adf = Ar Cdf = Cr (デスティネーションがあらかじめ乗算されている場合) Cdf = Cr / Ar (デスティネーションがあらかじめ乗算されていない場合)結果として得られるアルファがゼロの場合の除算は定義されていないため、その場合の除算は無視して「ゼロで除算」を避け、色成分はすべてゼロのままにしておきます。
パフォーマンス上の理由のため、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()
この合成のハッシュコードを返します。
|
public static final int CLEAR
Fs = 0 および Fd = 0 の場合、次のようになります。
Ar = 0 Cr = 0
public static final int SRC
Fs = 1 および Fd = 0 の場合、次のようになります。
Ar = As Cr = Cs
public static final int DST
Fs = 0 および Fd = 1 の場合、次のようになります。
Ar = Ad Cr = Cd
public static final int SRC_OVER
Fs = 1 および Fd = (1-As) の場合、次のようになります。
Ar = As + Ad*(1-As) Cr = Cs + Cd*(1-As)
public static final int DST_OVER
Fs = (1-Ad) および Fd = 1 の場合、次のようになります。
Ar = As*(1-Ad) + Ad Cr = Cs*(1-Ad) + Cd
public static final int SRC_IN
Fs = Ad、Fd = 0 の場合、次のようになります。
Ar = As*Ad Cr = Cs*Ad
public static final int DST_IN
Fs = 0、Fd = As の場合、次のようになります。
Ar = Ad*As Cr = Cd*As
public static final int SRC_OUT
Fs = (1-Ad) および Fd = 0 の場合、次のようになります。
Ar = As*(1-Ad) Cr = Cs*(1-Ad)
public static final int DST_OUT
Fs = 0 および Fd = (1-As) の場合、次のようになります。
Ar = Ad*(1-As) Cr = Cd*(1-As)
public static final int SRC_ATOP
Fs = Ad、Fd = (1-As) の場合、次のようになります。
Ar = As*Ad + Ad*(1-As) = Ad Cr = Cs*Ad + Cd*(1-As)
public static final int DST_ATOP
Fs = (1-Ad)、Fd = As の場合、次のようになります。
Ar = As*(1-Ad) + Ad*As = As Cr = Cs*(1-Ad) + Cd*As
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, 2013, Oracle and/or its affiliates. All rights reserved.