windows使用画笔绘制直线时,实际上是将画笔的像素颜色和目标显示表面的像素颜色按位进行布尔运算。
对像素颜色执行一个按位布尔运算称为“光栅操作”(rasteroperation,ROP)
绘制一条直线只涉及两种像素颜色(画笔和目标),这里的布尔运算就称作“二元光栅操作”,即“ROP2”
windows定义了 16 种 ROP2运算码,每一个都是windows组合画笔像素色和目标像素色的一种方式。
默认是
R2_COPYPEN 简单的复制画笔像素到目标像素
R2_NOTMERGEPEN 画笔颜色和目标颜色都是黑色时绘制白色,其他情况都是黑色
画笔(P):目标(D): | 1 1 | 1 0 | 0 1 | 0 0 | 布尔操作 | 绘图模式 |
结果: | 0 | 0 | 0 | 0 | 0 | R2_BLACK |
0 | 0 | 0 | 1 | ~(P | D) | R2_NOTMERGEPEN | |
0 | 0 | 1 | 0 | ~P & D | R2_MASKNOTPEN | |
0 | 0 | 1 | 1 | ~P | R2_NOTCOPYPEN | |
0 | 1 | 0 | 0 | P & ~D | R2_MASKPENNOT | |
0 | 1 | 0 | 1 | ~D | R2_NOT | |
0 | 1 | 1 | 0 | P ^ D | R2_XORPEN | |
0 | 1 | 1 | 1 | ~(P & D) | R2_NOTMASKPEN | |
1 | 0 | 0 | 0 | P & D | R2_MASKPEN | |
1 | 0 | 0 | 1 | ~(P ^ D) | R2_NOTXORPEN | |
1 | 0 | 1 | 0 | D | R2_NOP | |
1 | 0 | 1 | 1 | ~P | D | R2_MERGENOTPEN | |
1 | 1 | 0 | 0 | P | R2_COPYPEN(内定) | |
1 | 1 | 0 | 1 | P | ~D | R2_MERGEPENNOT | |
1 | 1 | 1 | 0 | P | D | R2_MERGEPEN | |
1 | 1 | 1 | 1 | 1 | R2_WHITE |
SetROP2 (hdc,iDrawMode); //设置绘图模式
iDrawMode = GetROP2(hdc); //获取绘图模式