資源描述:
《透明貼圖實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、透明貼圖繪制透明位圖是指在繪制位圖時只繪制除了指定顏色外的其余部分,而指定的顏色就被稱為“透明色”。通過將位圖的背景色指定成“透明色”,在繪制時不繪制帶“透明色”的這部分背景,僅繪制圖像,這樣就可以將圖像透明地繪制到窗口上。繪制包含透明色的位圖的方法有許多種,比較常用的是屏蔽繪制和非屏蔽繪制,屏蔽繪制指的是事先做一張掩碼位圖,非屏蔽繪制是動態(tài)生成掩碼位圖。下面將分別詳細介紹這兩種繪制方法。在寫透明貼圖的方法前先來說說透明貼圖,所謂的透明貼圖并不是真正意義上的透明,而是圖像不需要顯示的部分顯示出的顏色是當(dāng)前對話框的背景色,也就是說把圖像不需要顯示的顏色當(dāng)成背景色,顯示的部分
2、作為前景色,透明就是把背景換成對話框背景。要實現(xiàn)這種透明有兩種方法,一種是讓背景色成為白色,然后與對話框背景色進行與運算;還有一種是讓背景色成為黑色,然后與對話框背景色進行或運算。這樣位圖的背景色就消失了。了解了透明的概念,就可以避免透明貼圖的一些缺點,如果位圖的前景色也存在許多白色,則采用將背景色變成黑色,與對話框背景色進行或運算的方法,這樣前景色的白色部分才不會被誤當(dāng)成背景色透明顯示;反過來,如果位圖前景色存在大量黑色部分是,則采用將背景色變成白色,與對話框背景色進行與運算的方法。當(dāng)然,如果前景色同時存在大量白色和黑色時,則透明貼圖會遇到大麻煩,需要想辦法將位圖的白色
3、或黑色部分做一些修改后再進行透明貼圖。屏蔽繪制繪制透明位圖的關(guān)鍵就是創(chuàng)建一個“掩碼”位圖(maskbitmap),這個“掩碼”位圖是一個單色位圖,它是位圖中圖像的一個單色剪影。在MFC中,繪圖需要使用設(shè)備描述表,透明貼圖時需要創(chuàng)建兩個內(nèi)存設(shè)備描述表,一個是用于存放位圖的設(shè)備描述表(imgDC),一個是用于存放“掩碼”位圖的設(shè)備描述表(maskDC)。在“掩碼”位圖設(shè)備描述表中制作“掩碼”位圖的方法是先創(chuàng)建一個單色的bitmap,放入掩碼設(shè)備描述表(maskDC)中,然后使用拷貝粘貼的方式將存放有位圖的設(shè)備描述表(imgDC)繪制到掩碼設(shè)備描述表上,這樣,掩碼設(shè)備描述表顯示
4、的位圖即是“掩碼”位圖。在詳細介紹實現(xiàn)過程之前先介紹下所使用的畫圖函數(shù)以及函數(shù)參數(shù)所代表的功能;整個繪制過程需要使用到BitBlt()函數(shù),關(guān)于這個函數(shù),MSDN上的說明是這樣的:這個函數(shù)的功能是把源設(shè)備上下文中的一個矩形區(qū)域中所有像素的顏色比特信息傳輸給目標(biāo)設(shè)備上下文。BOOLBitBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,DWORDdwRop);函數(shù)參數(shù)如下:Intx表示繪制位圖目標(biāo)左上角x坐標(biāo);-8-Inty表示繪制位圖目標(biāo)左上角y坐標(biāo);IntnWidth表示繪制位圖目標(biāo)的區(qū)域?qū)挾龋籌
5、ntnHeight表示繪制位圖目標(biāo)的區(qū)域高度;CDC*pSrcDC表示存儲源位圖的設(shè)備描述表;IntxSrc表示源位圖的左上角x坐標(biāo);IntySrc表示源位圖的左上角y坐標(biāo);DWORDdwRop表示柵格運算標(biāo)志;dwRop的取值與值的描述如下表所示:值描述BLACKNESS用調(diào)色板中索引為0的顏色(默認是黑色)填充目標(biāo)矩形。CAPTUREBLT用調(diào)色板中索引為0的顏色(默認是黑色)填充目標(biāo)矩形。DSTINVERT將目標(biāo)矩形反色。MERGECOPY將源矩形中的顏色與當(dāng)前目標(biāo)設(shè)備環(huán)境選中的畫刷通過邏輯與操作進行混合。MERGEPAINT將源矩形的顏色反色后與目標(biāo)矩形的顏色通過
6、邏輯或操作進行混合。NOMIRRORBITMAP防止位圖鏡像翻轉(zhuǎn)。NOTSRCCOPY源矩形反色復(fù)制到目標(biāo)矩形。NOTSRCERASE將源矩形與目標(biāo)矩形的顏色通過邏輯或操作混合后,再反色。PATCOPY將目標(biāo)設(shè)備環(huán)境選中的畫刷復(fù)制到目標(biāo)位圖。PATINVERT將目標(biāo)設(shè)備環(huán)境選中的畫刷與目標(biāo)矩形中的顏色進行邏輯異或操作,復(fù)制到目標(biāo)位圖。PATPAINT將目標(biāo)設(shè)備環(huán)境選中的畫刷與源矩形中的顏色的反色進行邏輯或操作,其結(jié)果再與目標(biāo)矩形的顏色進行邏輯或操作。SRCAND將源矩形與目標(biāo)矩形的顏色進行邏輯與操作。SRCCOPY直接將源矩形拷貝到目標(biāo)矩形,最常用的繪制位圖屬性。SRCE
7、RASE將目標(biāo)矩形的反色與源矩形的顏色進行邏輯與操作。SRCINVERT將源矩形的顏色與目標(biāo)矩形進行邏輯異或操作。SRCPAINT將源矩形的顏色與目標(biāo)矩形進行邏輯或操作。WHITENESS用調(diào)色板中索引為1的顏色(默認是白色)填充目標(biāo)矩形。原圖如下所示,-8-下面是整個實現(xiàn)過程:1)創(chuàng)建一張大小與需要繪制圖像相同的位圖作為“掩碼”位圖;2)將新創(chuàng)建的“掩碼”位圖存儲至掩碼位圖的設(shè)備描述表中;3)把位圖設(shè)備描述表的背景設(shè)置成“透明色”,即不需要顯示的顏色;4)復(fù)制粘貼位圖到“掩碼”位圖的設(shè)備描述表中,這個時候“掩碼”位圖設(shè)備描述