二进制光栅作

本部分列出了 GetROP2SetROP2 函数使用的二进制光栅作代码。 光栅作代码定义 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 可见的红色/绿色线条