二进制光栅操作
本部分列出了 GetROP2 和 SetROP2 函数使用的二进制光栅操作代码。 光栅操作代码定义 GDI 如何将所选笔中的位与目标位图中的位组合在一起。
每个光栅操作代码都表示一个布尔运算,在该运算中,所选笔中的像素值和目标位图组合在一起。 下面是这些操作中使用的两个操作数。
操作数 | 含义 |
---|---|
P | 所选笔 |
D | 目标位图 |
这些操作中使用的布尔运算符如下所示。
运算符 | 含义 |
---|---|
a | 位与 |
n | 按位不 (逆) |
o | 按位“或” |
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 将值 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。 这些值打包在长整数的三个低序字节中。 笔的颜色始终是纯色,但目标颜色可以是任意两种或三种颜色的混合。 如果应用程序尝试使用可用的二进制光栅操作在蓝色目标上使用白色笔进行绘制,则会出现以下结果。
光栅操作 | 结果 |
---|---|
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 | 可见的红/绿线 |