二进制光栅操作

【勇芳软件工作室】汉化HomePreviousNext

本节列出了GetROP2SetROP2功能使用的二进制光栅操作代码。栅格操作代码定义了GDI如何将所选笔的位与目标位图中的位组合。

每个光栅操作代码表示一个布尔运算,其中组合所选笔和目标位图中的像素的值。以下是这些操作中使用的两个操作数:

操作数含义
P选笔
D目标位图

这些操作中使用的布尔运算符如下:

操作者含义
a按位AND
n按位NOT(反)
o按位OR
x按位异或(XOR)

所有布尔运算都以相反的波兰符号表示。例如,以下操作用笔和所选画笔的像素值的组合替换目标位图中的像素的值:

DPo

每个光栅操作代码是一个32位整数,其高位字是布尔运算索引,低位字是操作码。16位操作索引是一个零扩展的8位值,表示对两个参数(在这种情况下,笔和目标值)的布尔运算产生的所有可能结果。例如,DPo和DPan操作的操作指标如下所示:

PDDPoDPan
0001
0111
1011
1110

以下列表概述了它们所代表的绘图模式和布尔运算:

光栅操作布尔运算
R2_BLACK0
R2_COPYPENP
R2_MASKNOTPENDPna
R2_MASKPENDPa
R2_MASKPENNOTPDna
R2_MERGENOTPENDPno
R2_MERGEPENDPo
R2_MERGEPENNOTPDno
R2_NOPD
R2_NOTDn
R2_NOTCOPYPENPn
R2_NOTMASKPENDPan
R2_NOTMERGEPENDPon
R2_NOTXORPENDPxn
R2_WHITE1
R2_XORPENDPx

对于单色设备,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可见红/绿线