位图的光栅操作及ROP码解析
(SnowStart于2005年3月22日)
位图是windows图形编程中非常重要的一个方面。在进行普通的位图操作中,如GDI函数BitBlt,StretchBlt, StretchDIBits,都会用到一个光栅操作码,即ROP码,像SRCCOPY,PATPAINT,SRCAND等,由于最近在开发图形驱动,涉及了许多的ROP2,ROP3和ROP4码的操作,对ROP码进行了深入的研究,以下详细介绍之以和大家分享。
二元光栅操作:我们在使用GDI画线和填充区域时,GDI使用二元光栅操作码ROP2组合画笔或画刷像素和目标像素以得到新的目标像素。如SetROP2函数和GetROP2函数支持16种二元光栅操作,如:(具体见wingdi.h)
#define R2_NOT 6 // Dn
#define R2_XORPEN 7 // DPx
三元光栅操作:对于图像有同样的光栅操作用于生成各种特殊效果,我们要处理的有三种像素,源图像像素、目标图像像素和画刷像素(模板图像像素),称之为三元光栅操作,使用的是ROP3码,如:(更多的参见wingdi.h)
#define SRCPAINT (DWORD)0x00EE0086 // dest = source OR dest
#define SRCAND (DWORD)0x008800C6 // dest = source AND dest
四元光栅操作:是混合了源图像像素,目标图像像素和模板画刷像素外,又增加了一个掩码位图,用到4个变量形成了四元光栅操作,相应的为ROP4码,GDI函数中MaskBlt函数使用的是ROP4码,也是唯一接受四元光栅操作的API函数
光栅操作的编码:
一个字节可以编码256种光栅操作,假定

本文详细介绍了Windows图形编程中位图的光栅操作,包括二元、三元和四元光栅操作码(ROP2、ROP3、ROP4)。通过解释光栅操作码的作用,如SRCPAINT、SRCAND等,并探讨了光栅操作的编码方式,以及在GDI函数中的应用,如BitBlt、StretchBlt和MaskBlt。此外,还讨论了三元光栅操作码在Windows 2000及以上版本中引入的新标志CAPTUREBLT和NOMIRRORBITMAP的用途。
最低0.47元/天 解锁文章
4407

被折叠的 条评论
为什么被折叠?



