GDI透明繪圖

這幾天閒來無事想寫一個播放器的界面,但需要GDI透明繪圖的知識,找了一些資料,但理解的不是很清楚。

BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND)

比如上面的函數中源DC是一個單色位圖,目的DC是一個彩色位圖,如何進行與操作呢?

假設目的DC用4位表示一個像素,且整張位圖只有2個像素,像素值分別爲 1011 0011

而源DC是一張單色位圖,也只有兩個像素,分別爲 1 0

很顯然二者像素的位數不相同,那麼如何進行與操作呢,如果不進行變換,直接相與,即

1&1011 = ? ,0&0011 = ?這會是什麼結果呢?

在網上搜了很多資料才找到合理的解釋,那就是bitblt這個函數會自動檢測源和目的dc位數是否相同,

如果不同則會進行一些轉換,怎麼轉換呢?這就要用到SetTextColor、SetBkColor兩個函數了。

在單色位圖轉換爲彩色位圖時,需要知道彩色位圖中什麼是背景色,然後將黑白圖中的白色轉換成彩圖中的背景色,

黑色轉換爲彩圖中的前景色。例如上面的例子,如果彩色位圖背景色是1001,前景色是0101

那麼單色位圖將會被首先轉換爲,含有1001 0101兩個像素的彩色位圖,然後再和目標彩色位圖進行位操作,即

1001 & 1011= 1001 ,0101 & 0011 = 0001

這樣理解就OK了,至於彩色位圖轉換爲單色位圖就比較簡單了,SetBkColor來告訴彩圖什麼顏色設置爲白色,

其他顏色一律設置爲黑色,然後再進行位操作。

有了這些基礎知識,就比較容易理解透明位圖的製作原理啦。。。^_^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章