包含透明色的位圖的繪制方法有多種,最簡單的方法是調用現成的函數:TransparentBlt,也可以通過自己的代碼實作類似 TransparentBlt的功能,實作過程也有兩種形式,一種是事先做一張掩碼位圖,另一種是動态生成掩碼位圖。本文将介紹動态生成掩碼位圖繪制具有 透明區域位圖的方法。
一、TransparentBlt 函數的使用
TransparentBlt 函數在Windows98/Windows2000以上版本運作,系統中需要包含 Msimg32.dll,使用時可以連結 Msimg32.lib。
Windows98下的TransparentBlt會産生資源洩漏,是以不建議在WIN98下使用該函數。
TransparentBlt函數原型如下:
使用示例:
二、實作TransparentBlt函數
為了了解具有透明色位圖的繪制過程,我們來親手建立一個具有同TransparentBlt功能一緻的實驗函數,稱之為TransparentBlt2。
實驗素材:有兩張位圖:bk.bmp是背景位圖,football.bmp包含透明區域,透明色為藍色RGB(0,0,0xff)
實驗目的:以bk.bmp為背景,将football.bmp繪制到背景中,形成如下的最終效果圖。

2.1 透明位圖繪制原理
假設football.bmp ->載入 HBITMAP hImageBMP -> 選入 HDC hImageDC
2.1.1 生成足球的單色掩碼位圖,透明區域為白色(全1),非透明區域為黑色(全0)
這樣足球位圖中藍色區域在掩碼位圖中成了白色,其它區域為黑色,此時hMaskBMP 如下圖:
(圖一)
2.1.2 設定背景色為黑色,前景色為白色,将掩碼位圖(圖一)與足球位圖相"與"
這樣,掩碼位圖中背景色(黑色)的區域在hImageBMP中被保留,前景色(白色)的部分變為黑色。 此時hImageBMP 如下圖:
(圖二)
2.1.3 設定背景色為白色,前景色為黑色,将掩碼位圖(圖一)與背景進行“與”運算
掩碼中白色區域(資料與1相“與”結果不變)使背景保持不變,黑色區域變成黑色,此時背景顯示如下:
(圖三)
2.1.4 将hImageBMP(圖二)與背景(圖三)進行“或”運算
這樣就将足球繪制到背景上了。
2.2 TransparentBlt2函數全部實作代碼
2.3 TransparentBlt的另外一個版本:TransparentBltU
TransparentBltU是Christian Graus 在WinDEV發表的一個函數,功能與TransparentBlt一緻,以下是全部實作代碼:
說明:本文提供的TransparentBlt2函數旨在說明透明位圖的顯示原理,在Windows2000以上環境實際運用中建議使用現成的TransparentBlt函數來繪制透明位圖。