您的位置:首页 > 其它

关于制作透明位图的一点理解

2013-08-06 19:02 211 查看
今天看了一下午终于弄清楚怎么弄了写下来留个记忆,顺便分享下!!

其实透明位图制作就是通过位运算来制作的。

我当时想不明白的地方有两点:

1 遮罩怎么制作、什么作用

2 异或之后什么结果和怎么办



一 、 先说说异或两张图片异或我想成一个大圆中间有个小空心的 和一个小的实心圆

1. 两个圆以圆心对齐,异或一次不重叠的地方留下了重叠的地方没了。留下来的图形是大圆的外圈和圆心的小圆。

2. 小圆和大圆再异或一次大圆恢复了原样小圆没有了(大圆可以想成背景,小圆可以想成要贴的图片)。

这样来说透明完成了只不过整个图片全部透明了(理论上,实际上是根本就不存在)

二、 要想只把图片的背景透明物体留下这个就要在两次异或之间再加一步那就是遮罩了:

1. 遮罩是创建一个单色的bitmap用 bitmap.CreateBitmap() 这个遮罩的名字叫 zhezhao_map。

还要创建一个bitmap 用来加载你想粘贴的位图的 这个名字叫 ziyuan_map。(见谅本人英语不过关)

2. 然后创建两个位设备上下文用来装载这两个位图 一个叫 zhezhao_dc 一个叫 ziyuan_dc.

3. 开始制作遮罩:直接把ziyuan_dc COPY 到 zhezhao_dc 就行了。

感觉拷贝的过程要讲一下:由于自己的资源位图 ziyuan_map 是彩色的而 zhezhao_map 是单色的这个中间需要转换(内部的)。

每个设备上下文都有背景色(bkcolor)和前景色(textcolor),从彩色向单色转换时所有和设备背景色(bkcolor)相同的颜色转换为 1 (白色) 不同的被视为前景色转换为 0 (黑色)。

如果我们把我们资源位图(ziyuan_map)的背景色指定为设备上下文的背景色(ziyuan_dc.SetBkColor(xxx)) 这样拷贝过后的 zhezhao_dc 是什么样的想到了吗,呵呵背景色部分白了我们想要的部分黑了---->>遮罩好了。

我们只需要把这张遮罩在两次异或之间来一次 位与(SRCAND ) OK 了!!(在这之前把 背景(beijing_dc) 的前景色设为黑色 背景色设为白色因为复制回来还要转换一次,它是转换过后才位与的)

等下次异或的时候呵呵自己想吧!!

总共进行了两次异(SRCCONVERT)或和一次位与(SRCAND) 分别是 ziyuan_dc 异或到背景 然后 zhezhao_dc 位与到背景 最后 ziyuan_dc 再异或一次出来了。

不对的地方还请指出交流交流!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: