次の方法で共有


バイナリ ラスター演算

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

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

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

 

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

演算子 意味
ある ビットごとの 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 です。 値は、長整数の 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 赤/緑の線が表示されます