• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              117 Posts :: 2 Stories :: 61 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(8)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜


                由于所有的圖文件都是以一個(gè)四方矩形來(lái)存儲(chǔ)的,但有時(shí)我們可能會(huì)需要把一張怪物圖片貼到窗口的背景圖上,而在這種情況下如果我們直接進(jìn)行貼圖,其結(jié)果如下圖所示:
                這似乎不是所要的結(jié)果。在本篇隨筆中將要討論透明效果,就是要利用BitBlt()貼圖函數(shù)以及Raster值的運(yùn)算來(lái)將圖片中不必要的部分去掉(又稱去背),使得圖中的主體可以與背景圖完全融合。
                制作透明效果有多種方法,但基本上都是利用貼圖時(shí)不同的
            Raster運(yùn)算,通過(guò)轉(zhuǎn)換而最后產(chǎn)生相同的透明效果。
                以下面的恐龍圖為例子,首先必須準(zhǔn)備一張位圖,它的色彩分配如下所示

                圖中左邊的圖是要去背并貼在背景圖上的前景圖,右邊的黑白圖稱為“屏蔽圖”,在透明的過(guò)程中會(huì)用到它。把要去背的位圖與屏蔽圖合并成同一張圖,透明的時(shí)候再按照需要來(lái)進(jìn)行裁切。可以把它分成兩張圖,但這樣程序必須運(yùn)行兩次圖文件加載的操作。
                有了屏蔽圖就可以利用貼圖函數(shù)來(lái)產(chǎn)生透明效果了,所需進(jìn)行的貼圖步驟如下:
                (1)將屏蔽圖與背景圖做“AND”(Raster的SRCAND)運(yùn)算,貼到目的地DC中。
                (2)將前景圖與背景圖做“OR”(Raster的SRCPAINT)運(yùn)算,貼到目的地DC中。
                為什么經(jīng)過(guò)上面的兩個(gè)步驟就能產(chǎn)生透明的效果呢?可以參看下圖:

             

                接下來(lái)說(shuō)明上述兩個(gè)步驟所產(chǎn)生的圖點(diǎn)色彩的變化。
               
                1、屏蔽圖與背景圖做“AND”運(yùn)算
                (1)屏蔽圖中的黑色部分與背景圖做“AND”運(yùn)算
                 
                (2)屏蔽圖中的白色部分與背景圖做“AND”運(yùn)算
                  
                經(jīng)過(guò)這一運(yùn)算所產(chǎn)生的結(jié)果如圖20所示:

                2、前景圖與背景圖做“OR”運(yùn)算
                (1)前景圖中的彩色部分與圖20做“OR”運(yùn)算
                  
                (2)前景圖中的黑色部分與圖20做“OR”運(yùn)算
                  
                經(jīng)過(guò)這一運(yùn)算后所顯示的畫面就是所需的透明圖了,圖下圖所示

            范例ch2_6:透明效果的顯示。
            下載地址:ch2_6(上傳到windows live空間,可能需要MSN賬號(hào)登陸)
            說(shuō)明:程序源代碼中有相關(guān)的注釋。
            程序運(yùn)行結(jié)果如下圖:




            PS:如想獲得更多關(guān)于Visual C++游戲開(kāi)發(fā)的內(nèi)容,可點(diǎn)擊隨筆:《Visual C++游戲編程基礎(chǔ)》學(xué)習(xí)筆記——索引隨筆

            Feedback

            # re: 游戲畫面特效制作——透明效果 2010-04-08 17:35 陳梓瀚(vczh)
            GDI的話需要引入一個(gè)img32.lib還是什么鬼lib的話,可以使用名字好像是TransparentBlt的函數(shù),只要你的圖片經(jīng)過(guò)預(yù)處理,就可以根據(jù)每一個(gè)像素不同的alpha來(lái)處理每一個(gè)像素了。這樣畫出來(lái)會(huì)更快而且更漂亮。  回復(fù)  更多評(píng)論
              

            # re: 游戲畫面特效制作——透明效果 2010-04-08 17:37 煙皚
            @陳梓瀚(vczh)
            剛接觸Visual C++游戲開(kāi)發(fā)的東西,對(duì)GDI也不是特別的懂。你說(shuō)的那些,等我弄得差不多了~~再去看看,然后再補(bǔ)充這篇博客~~謝謝了~  回復(fù)  更多評(píng)論
              

            亚洲综合久久夜AV | 久久99国内精品自在现线| 久久91精品综合国产首页| 久久国产高清一区二区三区| 老司机午夜网站国内精品久久久久久久久 | 精品久久久久久国产三级| 久久人搡人人玩人妻精品首页| 91麻豆国产精品91久久久| 国产精品美女久久久久久2018| 久久激情五月丁香伊人| 麻豆AV一区二区三区久久| 久久99精品国产麻豆蜜芽| 国产精品一久久香蕉国产线看观看| 99久久婷婷国产综合精品草原 | 久久久亚洲欧洲日产国码是AV| MM131亚洲国产美女久久| 人妻无码αv中文字幕久久琪琪布| 久久成人精品视频| 久久国产热精品波多野结衣AV| 久久人人爽人人澡人人高潮AV| 久久狠狠高潮亚洲精品 | 精品综合久久久久久888蜜芽| 狠狠综合久久综合中文88| 7777久久亚洲中文字幕| 欧洲人妻丰满av无码久久不卡| 国产福利电影一区二区三区,免费久久久久久久精| 亚洲日本久久久午夜精品| 精品欧美一区二区三区久久久| 一级做a爰片久久毛片16| 久久人人爽人人爽人人片av高请| 久久久久亚洲AV成人网人人网站| 亚洲精品国产自在久久| 久久国产成人午夜aⅴ影院 | 精品久久人人妻人人做精品| 99久久超碰中文字幕伊人| 久久久久亚洲av无码专区| 天天躁日日躁狠狠久久| 香蕉久久av一区二区三区| 久久精品国产99久久无毒不卡 | 97视频久久久| 亚洲成色WWW久久网站|