三元光柵操作(Ternary Raster Operations,ROP3)定義了 BitBlt、PatBlt、StretchBlt 等 GDI 函數在繪圖時,如何結合來源點陣圖、選取畫刷(模式)與目的點陣圖三者的像素值。每個 ROP 碼都是一個 32 位整數,高位字為布林運算索引,低位字為操作碼。
| 符號 | 意義 |
|---|---|
| D | 目的點陣圖 |
| P | 選取畫刷 |
| S | 來源點陣圖 |
| 運算子 | 意義 |
|---|---|
| a | AND(按位與) |
| n | NOT(按位取反) |
| o | OR(按位或) |
| x | XOR(按位異或) |
所有布林運算採用逆波蘭表示法(後序表示法)。例如 PSo 表示 (P OR S),DPSoo 表示 ((D OR P) OR S)。
以 3 輸入真值表(P、S、D 各 0/1)共 8 種組合,依序產出結果位,組成 8 位元索引值:
PSo 索引 = 00FCh(第 252 行)DPSoo 索引 = 00FEh(第 254 行)| 十六進制 | ROP 碼 | 布林運算式 | 常用名稱 | 說明 |
|---|---|---|---|---|
| 00 | 00000042 | 0 | BLACKNESS | 目的設為黑色 |
| 11 | 001100A6 | DSon | NOTSRCERASE | 目的 = NOT (目的 OR 來源) |
| 33 | 00330008 | Sn | NOTSRCCOPY | 目的 = NOT 來源 |
| 55 | 00550009 | Dn | DSTINVERT | 目的 = NOT 目的 |
| 5A | 005A0049 | DPx | PATINVERT | 目的 = 目的 XOR 畫刷 |
| 66 | 00660046 | DSx | SRCINVERT | 目的 = 目的 XOR 來源 |
| 88 | 008800C6 | DSa | SRCAND | 目的 = 目的 AND 來源 |
| CC | 00CC0020 | S | SRCCOPY | 目的 = 來源(直接複製) |
| EE | 00EE0086 | DSo | SRCPAINT | 目的 = 目的 OR 來源 |
| F0 | 00F00021 | P | PATCOPY | 目的 = 畫刷 |
| FF | 00FF0062 | 1 | WHITENESS | 目的設為白色 |
WINDOWS.H 定義的常用名稱(如 SRCCOPY),提高程式碼可讀性