TransparentBitmap函数设置透明位图的原理分析
生活随笔
收集整理的這篇文章主要介紹了
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;
總結
以上是生活随笔為你收集整理的TransparentBitmap函数设置透明位图的原理分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux svn 指定端口号,linu
- 下一篇: java 设置控制台标题_修改Tomca