光栅运算疑问:VBNOTSRCCOPY、SRCAND、SRCPAINT等运算倒底会产生什么样的效果?

mfkinfo 2008-12-15 12:27:50
BitBlt的参数dwRop设为下值时,
VBSRCPAINT,通过OR操作符将源和目标矩形区域的颜色合并。
VBSRCAND,通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。
VBSRCINVERT,通过XOR(异或)操作符将源和目标矩形区域的颜色合并。
VBNOTSRCCOPY,将源矩形区域颜色取反,并拷贝到目标矩形区域。
这其中的源和目标倒底是怎样or\and\xor\not的,倒底是产生什么样的效果,有人能给讲讲么?半路和尚,实在想不通。

学了一个例程,有一段代码如下,其中hmaskdc和hInvertMaskDc分别是由picture1生成的蒙板和反转蒙板(或底片),调试都能正常生成,但是执行下面的3行语句就没了反应。注:picture2、picture1内提高预载入彩色图片,picture2尺寸大于picture1。
BitBlt Picture2.hDc, 0, 0, dx, dy, hMaskDC, 0, 0, vbSrcAnd
BitBlt Picture1.hDc, 0, 0, dx, dy, hInvertMaskDC, 0, 0, vbSrcAnd
BitBlt Picture2.hDc, 0, 0, dx, dy, Picture1.hDc, 0, 0, vbSrcPaint

捉摸着这两个问题可能有很大关联,第1个问题应是关键,所以就一起放上来了,希望有GDI高手能帮助解答一下。
...全文
1795 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
现在还是人类 2008-12-16
  • 打赏
  • 举报
回复
如果你使用的是掩码图,那么效果应该是取出掩码部分的图片与目标设备的图片融合
但你的方式不对,应该是
先将掩码图用vbSrcAnd的方式复制到目标设备,再用vbSrcInvert方式将需透明的图复制到目标设备
这样就行了,要注意的是需透明的地方用黑色
看看我写的范例
VB用Bitblt实现透明位图显示
fjwyshan 2008-12-16
  • 打赏
  • 举报
回复
ding
wap21 2008-12-16
  • 打赏
  • 举报
回复
ding
现在还是人类 2008-12-16
  • 打赏
  • 举报
回复
最好的电子资料库就是百度一下,只要你知道函数名,搜索一下就可以了。
如果要知道函数名,最好的方法就是在VC下查看函数申明,还有一个方法
可以了解得更加全,就是是直接用 UltraEdit 32 打开 gdi32.dll 然
后切换到文本模式查看,你可以随便搜索一个GDI函数,如 Bitblt,然后
你就可以看到旁边的全部是 GDI 函数名。这样看到的绝对是最全的 GDI
函数名称了。
mfkinfo 2008-12-16
  • 打赏
  • 举报
回复
佩服,不过我现在连在VB中调用API函数都吃不透,VC偶尔翻翻也是为了解决VB上的难题。
随便问一下,能推荐些GDI学习资料么?最好是网络资源,我们这里的电脑书籍实在是难找,更不要说是编程方面的了,偶见几本也是操作入门之类的。
mfkinfo 2008-12-16
  • 打赏
  • 举报
回复
谢了
现在还是人类 2008-12-16
  • 打赏
  • 举报
回复
没想过,不过如果要运算图像,公式很多,没必要研究太多BitBlt的参数。
因为功能确实不是很多。比如要实现带过渡的透明掩码效果,单靠BitBlt的参
数是不行的,还是要自己写,如果自己写出了高速的带过渡的透明掩码图叠加
的函数,那也不可能再用BitBlt来处理这种透明效果了。当然,高速的前提是
要熟悉GDI,然后稍微懂点VC就可以了。我现在基本很少用BitBlt做透明处理,
因为我自己用VC弄了个专门运算图形的DLL,里面有很多处理函数,作成了API
形式给我的程序调用,除非是简单的需求可能会用一下BitBlt,如果是透明处理,
用我的函数除了方便以外,效果会更加自然更漂亮,还可带阴影,在速度上用
VC做了优化处理,简洁了许多过程,也没看出有什么不妥的地方,当然也就不会
选BitBlt来处理啦。
mfkinfo 2008-12-16
  • 打赏
  • 举报
回复
实例我有啊,不过一直想不通,光栅运算是如何执行的。不过,重新整了一下思路,有头绪了,不知道对不对:
在光栅运算中,白色值为1,黑色值为0。和黑色相与的颜色自然也是0,而与白色相与的颜色值则还是它本身的值。
是不是这样啊,请指教。
mfkinfo 2008-12-15
  • 打赏
  • 举报
回复
SupermanKing :
  不好意思,你能看一下第2个问题么?说明白点就是:
  在第2问中,我想知道蒙板(hMaskDC,白底黑字)与目的场景区域(Picture2.hDc,彩色)进行与运算能产生什么效果,调试为什么没有反应?
  
  二进制位运算我是知道的,但不知道是什么进行的二进制运算,是颜色值吧?
  
mfkinfo 2008-12-15
  • 打赏
  • 举报
回复
没有人能回答吗?郁闷……
现在还是人类 2008-12-15
  • 打赏
  • 举报
回复
这其中的源和目标倒底是怎样or\and\xor\not的,倒底是产生什么样的效果,有人能给讲讲么?

效果?效果是要靠肉眼看的、感觉的,你要怎么说呢?
如果说or\and\xor\not是怎么回事,其实就是些二进制的位运算结果,真不知怎么说。

我到想问下一,你到底想实现怎样的效果?
是想自己运算出那种你想的效果还是想调用什么东西实现你想要的效果?

先把你的需求说出来(到底要干嘛),再说说你了解什么,你是如何做的,然后说一下你哪不明白
这样才好回答你问题呀。
随着通信电子技术的迅速发展,信息技术给家居行业产生了深远的影响,家居环境的智能化监控已经成为智能家居的一个重要的发展方向。人们逐渐对自己的生活提出一种更高的要求,他们需要一种智能化、可交互,并且融合现代创新科技的产品来改善他们的生活环境,使他们生活更加安全、舒适、便捷、智能。本文根据智能家居的发展背景和研究现状,并且从实用性和可行性角度出发,研究设计了一种基于STM32单片机的智能家居系统。该系统由一个多功能综合的技术系统组成,各个多功能子系统间具有协同配合能力。基于STM32单片机实现的功能子系统包括:智能温度检测,智能湿度检测,智能烟雾/火灾检测智能检测,无线传输,人机交互机构,风扇调节,报警模块。 整个系统分为前端51单片机采集板和后端STM32单片机接收板。 采集板使用DHT11温湿度传感器、MQ烟雾传感器完成室内家居环境的采集。然后通过nRFL24L01将采集到的数据发送给后端。接收板使用LCD1602完成数据显示、使用蜂鸣器模块报警,使用风扇驱动模块调节室内家居环境。本文完成了智能家居控制系统前端、后端软硬件的设计,使用Altium designer绘制了电路原理图,使用Keil C完成了51单片机和STM32单片机的编程与调试。 最后,对本文设计的基于STM32的智能家居控制系统进行部署调试。试验结果表明,该系统可成功应用在智能家居环境检测调节和火灾安全防护的领域,可提高家居生活智能化水平。

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧