|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.awt.AlphaComposite
public final class AlphaComposite
この 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()
この 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 |
フィールドの詳細 |
---|
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
オブジェクトを生成します。
rule
- 合成規則
IllegalArgumentException
- rule
がCLEAR
、SRC
、DST
、SRC_OVER
、DST_OVER
、SRC_IN
、DST_IN
、SRC_OUT
、DST_OUT
、SRC_ATOP
、DST_ATOP
、または XOR
のいずれでもない場合public static AlphaComposite getInstance(int rule, float alpha)
AlphaComposite
オブジェクトを生成します。転送先と合成される前に、転送元は指定されたアルファで乗算されます。
rule
- 合成規則alpha
- 転送元のアルファに掛ける定数アルファ。alpha
は、範囲 [0.0, 1.0] (両端を含む) の浮動小数点数値でなければならない
IllegalArgumentException
- 次の条件が成立する場合: alpha
が 0.0 より小さいか 1.0 より大きい場合、または rule
がCLEAR
、SRC
、DST
、SRC_OVER
、DST_OVER
、SRC_IN
、DST_IN
、SRC_OUT
、DST_OUT
、SRC_ATOP
、DST_ATOP
、または XOR
のいずれでもない場合public CompositeContext createContext(ColorModel srcColorModel, ColorModel dstColorModel, RenderingHints hints)
Composite
内の createContext
srcColorModel
- 転送元の ColorModel
dstColorModel
- 転送先の ColorModel
hints
- コンテキストオブジェクトが描画の選択肢を選択するときに使用するヒント
CompositeContext
オブジェクトpublic float getAlpha()
AlphaComposiste
のアルファ値を返します。この AlphaComposiste
がアルファ値を持たない場合は、1.0 が返されます。
AlphaComposite
のアルファ値public int getRule()
AlphaComposite
の合成規則を返します。
AlphaComposite
の合成規則public AlphaComposite derive(int rule)
AlphaComposite
オブジェクトを返します。指定された合成規則がこのオブジェクトですでに使用されている場合は、このオブジェクトが返されます。
rule
- 合成規則
AlphaComposite
オブジェクト
IllegalArgumentException
- rule
がCLEAR
、SRC
、DST
、SRC_OVER
、DST_OVER
、SRC_IN
、DST_IN
、SRC_OUT
、DST_OUT
、SRC_ATOP
、DST_ATOP
、または XOR
のいずれでもない場合public AlphaComposite derive(float alpha)
AlphaComposite
オブジェクトを返します。指定されたアルファ値がこのオブジェクトですでに使用されている場合は、このオブジェクトが返されます。
alpha
- 転送元のアルファに掛ける定数アルファ。alpha
は、範囲 [0.0, 1.0] (両端を含む) の浮動小数点数値でなければならない
AlphaComposite
オブジェクト
IllegalArgumentException
- alpha
が 0.0 より小さいか 1.0 より大きい場合public int hashCode()
Object
内の hashCode
Object.equals(java.lang.Object)
,
Hashtable
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 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。