关于制作透明位图的一点理解
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 再异或一次出来了。
不对的地方还请指出交流交流!!!!
其实透明位图制作就是通过位运算来制作的。
我当时想不明白的地方有两点:
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 再异或一次出来了。
不对的地方还请指出交流交流!!!!
相关文章推荐
- 关于 alter table move tablespace 的一点理解
- 关于malloc的一点理解
- 4000 关于ToolBar的一点理解
- 关于透明位图的生成,
- 我的一点浅见——关于机器的理解
- 一点关于位图的心得
- 关于NI CompactRIO自定义模块中FPGA与Labview FPGA中编程的一点理解
- 关于动态规划的一点理解
- 关于日期显示格式字符串的一点理解
- 关于IAP的一点深入理解
- 关于计算机编程的一点理解(1)
- 关于iOS block循环引用的一点理解
- 关于传值、传引用、传地址的一点小理解
- 关于session实现原理和运行机制的一点理解
- 关于C++指向指针的指针的一点测试与理解
- 关于BSGS一点理解
- vue中关于computed的一点理解
- 很想重新强调一点关于soa的理解
- 关于Win32中IO completion port的一点理解
- 关于图标的一点理解