博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TransparentBitmap函数设置透明位图的原理分析
阅读量:3977 次
发布时间:2019-05-24

本文共 771 字,大约阅读时间需要 2 分钟。

1、函数的功能:把一张位图设置成透明,不影响背景图的显示,并可改变大小

2、函数的思想:

  (1)以当前的hdc创建5个设备兼容dc(HDC):hMem,hSave,hBack,hObject,hTemp

  (2)将要透明处理的位图块选入其中一个hTemp,获取宽高,并转换成逻辑点值;
  (3)创建4个临时位图(HBITMAP):bmMem,bmSave,bmBack,bmObject
    其中bmMem和bmSave为设备兼容位图,bmBack和bmObject为单色位图
  (4)将创建的临时位图分别选入临时DC中,效果图如下:

图1 原位图
  (5)设置选入过位图块的hTemp的映射模式,并保存到hSave;
  (6)将hTemp的背景色设置为要透明的颜色,在原样拷贝到hObject,创建目标屏蔽码,
     然后恢复源DC(hTemp)的原始背景色;

图2 目标屏蔽码位图
  (7)创建反转的目标屏蔽码:将hObject中的目标屏蔽码取反,然后拷贝到hBack中;

         
     
               图3 反转的目标屏蔽码
  (8)拷贝主DC的背景到目标DC:hdc→hMem;(SRCCOPY)

                    

               图4 主屏幕该位置处的背景位图
    屏蔽位图的显示区:hObject→hMem;(SRCAND)

               

               图5 目标屏蔽码屏蔽背景位图
    屏蔽位图中的透明色:hBack→hTemp;(SRCAND)

                   

               图6 反转屏蔽码屏蔽位图中的透明色后的结果
    将位图与目标DC的背景做异或操作:hTemp→hMem;(SRCINVERT)

                         

               图7 图6与图5异或操作的结果
    拷贝目标到屏幕上:hMem→hdc;(SRCCOPY)(改变大小在此步骤中用StretchBlt)

                            

               图8 拷贝到屏幕该位置的局部效果(未改变大小)
    恢复原始位图:hSave→hTemp;(SRCCOPY)
  (9)删除临时内存位图,删除临时内存DC;

你可能感兴趣的文章
i2c子系统之__i2c_first_dynamic_b…
查看>>
linux内核SPI总线驱动分析(一)
查看>>
浅析linux内核中的idr机制
查看>>
source insight使用
查看>>
linux内核SPI总线驱动分析(一)
查看>>
linux设备模型之uart驱动架构分析
查看>>
source insight使用
查看>>
git基本使用
查看>>
七、WordPress配置HTTPS与开启CDN加速
查看>>
CentOS 6.7下MySQL 5.6 yum快速安装及参数详解
查看>>
CentOS6.8二进制安装MySQL5.6
查看>>
centos 6x系统下源码安装mysql操作记录
查看>>
Centos搭建Mysql主从复制
查看>>
centos下部署redis服务环境及其配置说明
查看>>
Centos7下部署两套python版本并存环境的操作记录
查看>>
利用阿里云的源yum方式安装Mongodb
查看>>
Mysql的二进制日志binlog的模式说明
查看>>
zabbix监控交换机、防火墙等网络设备
查看>>
Redis数据"丢失"讨论及规避和解决的几点总结
查看>>
Redis日常操作命令小结
查看>>