精通Visual C++圖象程式設計------讀書筆記8

藍色水發表於2020-04-05
    透明顯示,是指在將圖象顯示到背景上時,圖象上顏色為某種指定顏色的象素不被顯示出來,而保留該處的背景顯示.被指定的特定顏色叫做透明色。利用透明顯示可以在背景上顯示不規則的圖形,是許多圖象操作的基礎,比如背景動畫.
    最直觀的透明顯示方式是遍歷圖象的每一象素,如果象素的顏色不等於透明色,則顯示該象素,否則不顯示.但這種方法的缺陷是致命的,其實現速度太慢!
    使用BitBlt函式不僅是顯示點陣圖的最快的方法,而且利用該函式的光柵操作碼引數可以實現點陣圖與背景的不同融合方式,參見第2章的表2-3.通過設定一定的遮蔽點陣圖,並組合使用適當的光柵操作方式,就可以用Bitblt函式來實現點陣圖的透明顯示,其基本的實現步驟如下:
    (1)建立一個與需透明顯示點陣圖(源點陣圖b0)同樣大小的單色遮蔽碼點陣圖b1.將遮蔽碼點陣圖中與顯示點陣圖中需透明的象素具有相同位置的象素設定為白色,與不透明的象素具有相同的象素設定為黑色.
    (2)用BitBlt函式,以SRCAND光柵操作碼將b1單色遮蔽碼點陣圖與背景點陣圖組合起來,生成點陣圖b2.這時不透明的象素在b2上將顯示為黑色.
    (3)將單色遮蔽碼點陣圖b1取反到單色點陣圖b3,用BitBlt函式,以SRCAND光柵操作碼將b3與b0組合起來,得到點陣圖b4.這時b4中透明的象素將顯示為黑色.
    (4)用BitBlt函式,以SRCINVERT(異或)光柵操作碼將第三步中得到的點陣圖b4顯示到第二步中得到的點陣圖b2組合起來,得到點陣圖b5.這時b5中背景將透過源點陣圖中的透明色顯示出來
    (5)用Bitblt函式,以SRCCOPY光柵操作碼將b5顯示到背景點陣圖中,實現了點陣圖的透明顯示.
 

相關文章