本节列出了GetROP2和SetROP2功能使用的二进制光栅操作代码。栅格操作代码定义了GDI如何将所选笔的位与目标位图中的位组合。
每个光栅操作代码表示一个布尔运算,其中组合所选笔和目标位图中的像素的值。以下是这些操作中使用的两个操作数:
操作数 | 含义 |
P | 选笔 |
D | 目标位图 |
这些操作中使用的布尔运算符如下:
操作者 | 含义 |
a | 按位AND |
n | 按位NOT(反) |
o | 按位OR |
x | 按位异或(XOR) |
所有布尔运算都以相反的波兰符号表示。例如,以下操作用笔和所选画笔的像素值的组合替换目标位图中的像素的值:
DPo
每个光栅操作代码是一个32位整数,其高位字是布尔运算索引,低位字是操作码。16位操作索引是一个零扩展的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将零值映射为黑色,将值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。这些值被打包在长整数的三个低位字节中。笔的颜色始终是纯色,但目的地的颜色可以是任何两种或三种颜色的混合。如果应用程序尝试使用可用的二进制栅格操作在蓝色目标上绘制白色笔,则会发生以下结果:
光栅操作 | 结果 |
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 | 可见红/绿线 |