1、SetROP2()函数
SetRop2()函数是GDI中的函数,其主要目的是设置当前的前景混合模式。GDI使用前景混合模式来结合画笔和对象内部填充的当前屏幕中的颜色。前景混合模式定义了画笔和画刷的颜色和已经存在的图像中的颜色将如何去结合
int SetROP2(
HDC hdc,
int rop2
);
参数:
hdc 设备上下文的句柄
rop2 混合模式
rop2的取值
混合模式 | 意义 |
---|---|
R2_BLACK | 像素值为0 |
R2_COPYPEN | 像素值为画笔的颜色值 |
R2_MASKNOTPEN | 像素值为屏幕颜色值与画笔颜色值取反后的交集 |
R2_MASKPEN | 像素值为屏幕颜色值与画笔颜色值的交集 |
R2_MASKPENNOT | 像素值为屏幕颜色值取反与画笔颜色值的交集 |
R2_MERGENOTPEN | 像素值为屏幕与画笔颜色值取反的并集 |
R2_MERGEPEN | 像素值为屏幕颜色值和画笔颜色值的并集 |
R2_MERGEPENNOT | 像素值为屏幕颜色值取反和画笔颜色值的交集 |
R2_NOP | 像素值不作任何改变 |
R2_NOT | 像素值为屏幕颜色值取反 |
R2_NOTCOPYPEN | 像素值为画笔颜色值取反 |
R2_NOTMASKPEN | 像素值为R2_MASKPEN取反 |
R2_NOTMERGEPEN | 像素值为R2_MERGEPEN取反 |
R2_NOTXORPEN | 像素值为R2_XORPEN取反 |
R2_WHITE | 像素值总是1 |
R2_XORPEN | 像素值为画笔颜色值和屏幕颜色值的异或 |
在绘制鼠标线的过程中,会出现相当明显的卡顿,导致绘制的鼠标线出现跳帧的情况,让我以为原因处在这个函数处(原因在2)。
在程序中使用的rop2的值为 R2_NOT该结合模式主要是用来绘制橡皮线,后绘制的线会将前面绘制的线给覆盖掉,如同被橡皮擦掉。
现在来试验一下各参数的效果
将画笔设置为红色RGB(255,0,0)
背景为白色RGB(255,255,255)
R2_BLACK
画出的颜色为黑色RGB(0,0,0)
R2_COPYPEN
画出的颜色为红色RGB(255,0,0)
R2_MASKNOTPEN
画出的为青蓝色RGB(0,255,255)
R2_MASKPEN
画出的颜色为红色RGB(255,0,0)
R2_MASKPENNOT
画出的颜色显示黑色RGB(0,0,0),再次在同一位置绘图会变成红色RGB(255,0,0)
R2_MERGENOTPEN
画出的颜色为白色RGB(255,255,255)
R2_MERGEPEN
画出的颜色为白色RGB(255,255,255)
R2_NOP
画面没有任何改变
R2_NOT
画出的颜色显示黑色RGB(0,0,0),且在同位置在此绘画,会擦除原来的线条
R2_NOTCOPYPEN
画出的为青蓝色RGB(0,255,255)
R2_NOTMASKPEN
画出的为青蓝色RGB(0,255,255)
R2_NOTMERGEPEN
画出的颜色显示黑色RGB(0,0,0),然后变为青蓝色蓝色(0,255,255),再变为红色RGB(255,0,0)
R2_NOTXORPEN
画出的颜色为红色RGB(255,0,0)
R2_WHITE
画出的颜色为白色RGB(255,255,255)
R2_XORPEN
画出的为青蓝色RGB(0,255,255)
2、关于soui界面透明度的问题
在使用SOUI的界面上,自定义了一个窗口控件,继承SWindow类
在定义的空间中绘制柱状图(画刷的属性为固体,透明度255)和虚线(像素透明度255)时,由于界面背景为黑色,在开发时没有注意到有什么问题,只是会出现1中的鼠标线跳帧现象,但是当程序界面下层的颜色改编为浅色时,会发现,柱状图和许仙的颜色会有轻微的改变,即具有一定的透明的,同时可以透过该程序点击到图层下层程序的相关内容。
为了解决这个问题,将控件背景,程序背景都设为了黑色,还是没有解决。
在尝试了修改各种地方的透明度和背景颜色依然无效后,终于找到了问题所在的原因,主界面的SOUI节点中的translucent属性为1,这个属性是设置主窗口的透明度,将其设置为0后,透明问题解决,同时提高了鼠标线的流畅度。
这个应该是在半透明时,电脑需要在同一块地方同时绘制两个程序的界面,加大了对cpu的消耗,导致了程序的卡顿。