バイナリ ラスター操作
このセクションでは、 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 | 赤/緑の線が表示されます |