实现透明位图时对单色位图与颜色位图转换的思考
来源:互联网 发布:办公软件excel教程 编辑:程序博客网 时间:2024/04/30 18:42
在资源中创建如下位图,资源ID是:IDB_BITMAP1。
加载位图IDB_BITMAP1:
得到该位图的BITMAP结构,后面会通过该结构使用位图的宽和高。
创建一个单色位图(也就是所谓的掩码图):
设置源位图的背景色为要被透明的颜色并拷贝源位图到掩码位图,对于IDB_BITMAP1,我们要透明的颜色是红色,所以,用如下代码:
此时,要补充一个知识点,那就是单色位图与颜色位图之间的转换操作。
当目标dc的位图是颜色位图,源dc的位图是单色的时候,单色位图在实际的光栅操作(ROP)之前会被转换成颜色位图,对应的位如果是0,则被转换目标dc的前景色,如果该位是1,则被转换成目标dc的背景色。相反,如果目标dc的位图是单色位图,源dc的位图是颜色位图,则在实际光栅操作之前要把颜色位图转换成单色位图,转换规则是,颜色位图中所有和背景色一致的象素都变成1,其他的象素都被转换成0。
以上这些是本人自己的观察,理解和总结,至今还没有查到官方的描述。
根据上面的结论,现在的掩码位图是下面的样子了:
此时,相当于有了两个位图,一个是源位图,一个是掩码位图。下面有两种方法实现透明的效果。不过下面生成透明图的方法前提必须保证最终dc,本例里的pDC的前景色是黑色,背景色是白色。如果不是,需要先设置,但记得操作完之后设置会原来的颜色。
1.
2.也是网上大多数的实现:源位图与目标设备进行异或操作,然后掩码位图与目标设备进行与操作,最后源位图再和目标设备进行一次异或操作:
最后别忘删除暂用的dc,我这里就略了。
- 实现透明位图时对单色位图与颜色位图转换的思考
- 彩色位图与单色位图
- 单色位图、颜色(色彩)位图相互转换
- 单色位图的读取
- 透明位图指定颜色
- 单色位图的联通性
- 透明镂空位图的实现
- VC 透明位图 实现透明位图类
- 透明位图实现
- 透明位图的显示
- 透明位图的显示
- 透明位图的显示
- 透明色的位图
- 透明位图的显示
- 透明位图的绘制
- 透明位图的显示
- 位图的透明显示
- 透明位图的显示
- Chord:一个用于网络应用的可扩展的P2P查询服务(上)
- 华山论剑之 C++引用的实现机制一(背后的秘密和真相)
- Linux日志系统
- Chord:一个用于网络应用的可扩展的P2P查询服务(下)
- 动态加载页面--小练
- 实现透明位图时对单色位图与颜色位图转换的思考
- 文献管理软件 JabRef 入门简介
- 有理数的抽象数据类型
- bat文件 执行路径
- 互相引用项目开发中编译问题处理办法
- 精典的让人无语。。。
- 聊天机器人的技术意义
- WebKite的资源是否重新下载的检查
- 如何成为一名专家级的开发人员——读后总结