二进制光栅作
本部分列出了 GetROP2 和 SetROP2 函数使用的二进制光栅作代码。 光栅作代码定义 GDI 如何将所选笔中的位与目标位图中的位组合在一起。
每个光栅作代码表示一个布尔运算,在该作中,所选笔和目标位图中的像素值将组合在一起。 以下是这些作中使用的两个作数。
操作数 | 意义 |
---|---|
P | 所选笔 |
D | 目标位图 |
这些作中使用的布尔运算符如下。
算子 | 意义 |
---|---|
一个 | 按位 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 | 可见的红色/绿色线条 |