バイナリ ラスター操作

このセクションでは、 GetROP2 関数と SetROP2 関数で使用されるバイナリ ラスター演算コードの一覧 示します。 ラスター演算コードは、GDI が選択したペンのビットとコピー先ビットマップ内のビットを組み合わせる方法を定義します。

各ラスター演算コードは、選択したペン内のピクセルの値とコピー先ビットマップを組み合わせたブール演算を表します。 これらの操作で使用される 2 つのオペランドを次に示します。

オペランド 説明
P 選択したペン
D コピー先ビットマップ

 

これらの操作で使用されるブール演算子は次のとおりです。

演算子 説明
a ビット演算子 AND
n ビットごとの NOT (逆)
o ビットごとの OR
x ビットごとの排他的 OR (XOR)

 

すべてのブール演算は、逆ポーランド語表記で表示されます。 たとえば、次の操作は、コピー先のビットマップ内のピクセルの値を、ペンと選択したブラシのピクセル値の組み合わせに置き換えます。

DPo 

各ラスター演算コードは 32 ビットの整数で、高次ワードはブール演算インデックスで、下位ワードは演算コードです。 16 ビット演算インデックスは、2 つのパラメーター (この場合はペンと宛先の値) に対するブール演算の結果として生じる可能性のあるすべての結果を表す、0 から拡張された 8 ビット値です。 たとえば、DPo 操作と DPan 操作の操作インデックスを次の一覧に示します。

P D Dpo Dpan
0 0 0 1
0 1 1 1
1 0 1 1
1 1 1 0

 

次の一覧は、描画モードと、それらが表すブール演算の概要を示しています。

ラスター操作 ブール演算
R2_BLACK 0
R2_COPYPEN P
R2_MASKNOTPEN DPna
R2_MASKPEN Dpa
R2_MASKPENNOT PDna
R2_MERGENOTPEN DPno
R2_MERGEPEN Dpo
R2_MERGEPENNOT PDno
R2_NOP D
R2_NOT DN
R2_NOTCOPYPEN Pn
R2_NOTMASKPEN DPan
R2_NOTMERGEPEN DPon
R2_NOTXORPEN DPxn
R2_WHITE 1
R2_XORPEN Dpx

 

モノクロ デバイスの場合、GDI は値 0 を黒に、値 1 を白にマップします。 アプリケーションが、使用可能なバイナリ ラスター操作を使用して白い宛先に黒いペンで描画しようとすると、次の結果が発生します。

ラスター操作 結果
R2_BLACK 黒い線が見える
R2_COPYPEN 黒い線が見える
R2_MASKNOTPEN 線が表示されない
R2_MASKPEN 黒い線が見える
R2_MASKPENNOT 黒い線が見える
R2_MERGENOTPEN 可視線なし
R2_MERGEPEN 見える黒い線
R2_MERGEPENNOT 見える黒い線
R2_NOP 可視線なし
R2_NOT 見える黒い線
R2_NOTCOPYPEN 可視線なし
R2_NOTMASKPEN 可視線なし
R2_NOTMERGEPEN 見える黒い線
R2_NOTXORPEN 見える黒い線
R2_WHITE 可視線なし
R2_XORPEN 可視線なし

 

カラー デバイスの場合、GDI は RGB 値を使用してペンとコピー先の色を表します。 RGB カラー値は、指定された色の強度を指定する赤、緑、青の色フィールドを含む長整数です。 強度の範囲は 0 ~ 255 です。 値は、long 整数の 3 つの下位バイトでパックされます。 ペンの色は常に単色ですが、宛先の色は任意の 2 色または 3 色の組み合わせにすることができます。 アプリケーションが、使用可能なバイナリ ラスター演算を使用して青い宛先に白いペンで描画しようとすると、次の結果が発生します。

ラスター操作 結果
R2_BLACK 見える黒い線
R2_COPYPEN 見える白い線
R2_MASKNOTPEN 見える黒い線
R2_MASKPEN 見えない青い線
R2_MASKPENNOT 赤/緑の線が表示されます
R2_MERGENOTPEN 見えない青い線
R2_MERGEPEN 見える白い線
R2_MERGEPENNOT 見える白い線
R2_NOP 見えない青い線
R2_NOT 赤/緑の線が表示されます
R2_NOTCOPYPEN 見える黒い線
R2_NOTMASKPEN 赤/緑の線が表示されます
R2_NOTMERGEPEN 見える黒い線
R2_NOTXORPEN 見えない青い線
R2_WHITE 見える白い線
R2_XORPEN 赤/緑の線が表示されます