TransparentBitmap函数设置透明位图的原理分析

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;


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值