大家好,又见面了,我是你们的朋友全栈君。
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中;
(8)拷贝主DC的背景到目标DC:hdc→hMem;(SRCCOPY)
屏蔽位图的显示区:hObject→hMem;(SRCAND)
屏蔽位图中的透明色:hBack→hTemp;(SRCAND)
将位图与目标DC的背景做异或操作:hTemp→hMem;(SRCINVERT)
拷贝目标到屏幕上:hMem→hdc;(SRCCOPY)(改变大小在此步骤中用StretchBlt)
恢复原始位图:hSave→hTemp;(SRCCOPY)
(9)删除临时内存位图,删除临时内存DC;
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162710.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...