青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  117 Posts :: 2 Stories :: 61 Comments :: 0 Trackbacks

常用鏈接

留言簿(8)

搜索

  •  

最新評論

閱讀排行榜

評論排行榜


    半透明在游戲中通常用來呈現若隱若現的特殊效果。事實上這種效果的運用相當頻繁,比如薄霧、鬼魂或隱形任務等,有時會以半透明的手法來表現。本篇隨筆就來介紹半透明效果的制作方法,下圖23是一張位圖經過半透明處理后顯示在背景上的效果。

1、半透明的制作原理
   
     簡單地說,半透明效果就是前景圖案與背景圖案像素顏色的混合。從圖23中觀察半透明效果呈現的區域,可以看到背景圖案,也可看到前景的人物圖案。什么是前景圖案與背景圖案像素顏色的混合呢?這就要從位圖的基本結構開始談起了。
    一張位圖是由許多的像素所組成的,每一個像素中都包含紅(R)、綠(G)、藍(B)三原色的色彩值,由這三種原色值來決定該像素的色彩。而要呈現半透明效果,必須將前景圖與背景圖彼此對應像素的顏色依某一比例來進行調配,這個比例就叫做“不透明度”。
    以沒有進行半透明處理,單純地將一張前景圖貼到背景圖上的一塊區域來說,前景圖的不透明度是100%,而背景圖在這一塊區域上的不透明度則是0%(完全透明,所以看不見背景),也就是說在這塊區域上,背景圖的色彩完全派不上用場。
    可是如果想要有半透明的效果,讓前景圖看起來稍微透明一點,那就需要確定不透明度的值。假設確定不透明度是70%,也就是說前景圖像素顏色按照一定的不透明度比例進行合成,那么最后整個區域所呈現出來的就是所要的半透明效果了。綜合上面的說明,可以整理出一個建檔的公式如下:
    半透明圖色彩 = 前景圖色彩 × 不透明度 + 背景圖色彩 ×(1 - 不透明度)

2、半透明的操作步驟
   
    清楚了半透明制作的原理后,接下來說明程序產生半透明效果的實際步驟。
    步驟一:取得位圖結構
    位圖結構包含了一些位圖的基本信息,由于我們在制作半透明效果時會用到,因此在從文件加載位圖后,必須先取得該位圖的結構,而取的位圖結構的函數如下:
int GetObject(   HGDIOBJ GDI對象,  //取得GDI對象結構
                           
int 結構大小,
                            LPVOID 結構變量,);
    上面這個函數用于取得GDI對象的信息,包含這里所談的位圖,其中第3個參數是一個結構變量,如果是用于取得位圖的信息,則輸入一個位圖結構的地址,而Windows API所定義的位圖結構(BITMAP)如下:
typedef struct tagBITMAP{
                                                                LONG bmType;  
// 位圖類型,必須設為0
                                                                
LONG bmWidth;  // 位圖寬度
                                                               
LONG bmHeight; //位圖長度
                                                                
LONG bmWidthBytes;  //每一列像素所占Byte數
                                                               
WORD bmPlanes;  //顏色平面數
                                                               
WORD bmBitsPixel; //像素的位數
                                                                
LPVOID bmBits;  //位圖內存指針
                                                            
}
BITMAP;
    后面將會用到bmWidth、bmHeight、bmWidthBytes及bmBitsPixel這幾個結構成員的信息。
    在此舉個例子來說明取得位圖結構的方法,假設現在有一個位圖名稱為“bitmap”,位圖結構變量名稱為“bm”,則使用GetObject()函數取得BITMAP結構的程序代碼如下:
GetObject(bitmap,sizeof(BITMAP),&bm);
    這樣,位圖結構bm中的各個結構成員便包含了位圖bitmap的基本信息。
    步驟二:建立暫存數組
    取得位圖的結構,接下來必須先建立一個暫存數組準備存儲位圖中所有像素的顏色值。這個暫存數組的大小是由前一個步驟中所取得位圖的bmHeight與bmWidthBytes信息來決定的,因此,必須利用指針來動態建立。延續前一個例子,若要建立一個可存儲bitmap所有像素顏色值的暫存數組,程序代碼如下:
unsigned char *px = new unsigned char [bm.bmHeight * bm.bmWidthBytes];
    這里,因為unsigned char變量類型大小是1Byte,所以這個數組的每個元素大小也就是1Byte(8bits)。以一張24bits色彩的位圖來說,它的每個像素是以24bits來表示顏色的,其中B(藍)、G(綠)、R(紅)三原色各占8個bits。
    因此,在下面的步驟中,當取出位圖的所有顏色并存儲在這個數組中時,每一個像素會占用3個數組元素來存儲B、G、R的顏色值。
    步驟三:取得位圖位置
    建立了暫存數組之后,要取出位圖的所有顏色值存儲到數組中就簡單多了,有一個現成的API函數可以使用。
LONG GetBitmapBits(  HBITMAP 位圖,  // 取得位圖位值
                                        
LONG 要取得的Byte數,
                                         LPVOID 存儲的數組指針);
    使用此函數取得位圖位值的程序代碼如下。
GetBitmapBits(bitmap, bm.bmHeight * bm.bmWidthBytes, px);
    下面以圖來說明像素顏色值存儲在數組中的對應關系,如下圖所示:

    步驟四:合成像素顏色值
    取得了位圖的所有像素顏色值之后,接下來的工作就是按照不透明度來設定半透明區域內每個像素的顏色了。
    此時應該會有兩個像素顏色數組,一個是前景圖的,一個則是背景圖的。根據實際要顯示半透明區域的坐標,將這兩個數組算出對應的元素進行簽名講過的顏色合成運算,再存回暫存數組中,anemia數組中所存儲的便是已經完成半透明的顏色值了。這個步驟的實際處理過程,將在代碼中做詳細說明。
    步驟五:重設位圖顏色
    處理完暫存數組中半透明的顏色值之后,最后一個操作就是根據數組的內容來重設位圖的顏色。這個操作同樣可以使用一個API的函數來完成。
LONG SetBitmapBits(     HBITMAP 位圖, //設定位圖位值
                                           
DWORD 顏色數組大小, 
                                           CONST VOID 數組指針 );
//為什么是CONST VOID?

    以上5個步驟都完成之后,所要的半透明圖也就完成了,剩下的就只有貼圖操作了。


范例ch2_7:取得前景圖與背景圖的顏色值,以前景圖的不透明度30%和背景圖的不透明度70%進行半透明處理,制作半透明效果。
下載地址:ch2_7(上傳到windows live空間,可能需要MSN賬號登陸)
說明:程序源代碼中有相關的注釋。
程序運行結果如下圖:



PS:如想獲得更多關于Visual C++游戲開發的內容,可點擊隨筆:《Visual C++游戲編程基礎》學習筆記——索引隨筆
posted on 2010-04-08 19:12 煙皚 閱讀(1387) 評論(0)  編輯 收藏 引用 所屬分類: 《Visual C++游戲編程基礎》學習筆記
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美中文字幕视频在线观看| 亚洲精品中文字| 亚洲欧美一区二区激情| 一区二区三区精品在线| 亚洲片在线观看| 欧美a级在线| 欧美va天堂| 亚洲日本欧美| 亚洲午夜在线观看视频在线| 亚洲一区二区欧美| 性欧美video另类hd性玩具| 久久精品亚洲乱码伦伦中文 | 久久精品国产99国产精品| 久久精品国产96久久久香蕉| 噜噜噜躁狠狠躁狠狠精品视频 | 久久久久中文| 欧美精品一区二区三区高清aⅴ| 欧美另类高清视频在线| 国产精品一区二区三区观看 | 欧美国产日本| 亚洲精品一区二区三区婷婷月| 99精品视频免费全部在线| 亚洲欧美亚洲| 欧美大片免费久久精品三p | 久久都是精品| 欧美激情一区二区三区在线视频观看 | 在线成人www免费观看视频| 亚洲啪啪91| 欧美呦呦网站| 亚洲国产精品欧美一二99| 亚洲一区国产精品| 欧美成人综合在线| 国产欧美精品一区aⅴ影院| 亚洲国产欧美久久| 久久xxxx精品视频| 亚洲人成在线免费观看| 欧美在线视频一区二区三区| 欧美日韩妖精视频| 亚洲精品一区二区三区四区高清 | 亚洲女女女同性video| 免费成人毛片| 午夜国产精品视频| 欧美日韩国产黄| 亚洲电影第1页| 欧美亚洲综合在线| 亚洲精品一区二区三区婷婷月| 久久精品国产久精国产爱| 国产精品久久久久久久久久久久久久 | 亚洲风情亚aⅴ在线发布| 欧美亚洲在线播放| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲精选一区| 久久综合综合久久综合| 国产欧美日韩三级| 亚洲综合视频一区| 日韩一级黄色大片| 欧美日韩精品一区二区天天拍小说| 亚洲福利专区| 欧美国产精品久久| 欧美国产日韩视频| 国产日本欧美一区二区三区在线| 99热免费精品在线观看| 久久亚洲二区| 欧美一区在线看| 国产日产精品一区二区三区四区的观看方式 | 久久久中精品2020中文| 国产一区二区三区高清 | 小黄鸭精品aⅴ导航网站入口| 亚洲精品视频中文字幕| 欧美激情一区二区三级高清视频 | 亚洲国产一区在线| 欧美成人一区在线| 美国三级日本三级久久99| 亚洲福利小视频| 亚洲国产欧美国产综合一区| 鲁大师影院一区二区三区| 亚洲破处大片| 日韩一级大片| 国产一区二区精品久久| 蜜臀av国产精品久久久久| 欧美黄色小视频| 亚洲在线视频| 久久国产精品第一页| 伊人久久成人| 91久久中文| 国产精品性做久久久久久| 久久久人成影片一区二区三区观看 | 欧美大香线蕉线伊人久久国产精品| 久久久xxx| 一区二区日韩欧美| 亚洲欧美日韩成人| 亚洲二区在线观看| 欧美黄色精品| 国产精品伦理| 美女黄毛**国产精品啪啪| 欧美另类综合| 久久九九精品| 欧美久久视频| 久久久久国产精品一区三寸| 欧美成人免费小视频| 欧美一区激情| 欧美国产日韩视频| 久久激情视频久久| 欧美日韩国产91| 亚洲精品在线二区| 一区二区三区**美女毛片| 很黄很黄激情成人| 一区二区欧美日韩| 亚洲国产精品一区二区三区| 久久五月婷婷丁香社区| 国产在线观看精品一区二区三区| 久久久久天天天天| 欧美日韩免费在线| 美女黄网久久| 国产欧美69| 99精品国产在热久久婷婷| 在线观看欧美精品| 亚洲一区二区三区激情| 亚洲日产国产精品| 久久久久国色av免费观看性色| 亚洲免费在线视频| 麻豆国产精品va在线观看不卡| 亚洲天堂成人| 亚洲激情在线观看视频免费| 亚洲一区自拍| 亚洲无毛电影| 欧美日韩一级大片网址| 亚洲人成77777在线观看网| 影音先锋另类| 久久都是精品| 久久久亚洲一区| 久久av一区| 校园春色国产精品| 亚洲男人的天堂在线| 欧美视频一区二区三区四区| 亚洲黄页一区| 亚洲精品在线三区| 欧美国产第一页| 亚洲电影在线免费观看| 亚洲福利在线观看| 狼狼综合久久久久综合网 | 亚洲免费视频一区二区| 欧美激情一区| 亚洲精品久久久久久下一站 | 久久综合给合久久狠狠色| 久久婷婷国产综合国色天香| 国产噜噜噜噜噜久久久久久久久| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲毛片在线看| 激情视频一区| 久久精品男女| 免费成人高清视频| 亚洲国产一区二区三区高清| 欧美aaa级| 亚洲精品一区久久久久久| 亚洲私人影院| 国产欧美日韩麻豆91| 久久久91精品国产| 亚洲高清久久久| 亚洲五月六月| 国产农村妇女精品一二区| 久久成人精品视频| 欧美黄在线观看| 亚洲婷婷综合色高清在线 | 国产精品视频免费观看www| 亚洲欧美国产制服动漫| 激情综合色综合久久综合| 欧美freesex交免费视频| 日韩一级片网址| 欧美大色视频| 欧美午夜宅男影院在线观看| 亚洲网站啪啪| 欧美大胆a视频| 国产精品99久久久久久久vr| 国产伦精品一区二区三区视频黑人| 亚洲在线观看| 欧美一站二站| 亚洲精品免费观看| 久久av在线| 亚洲精品国产日韩| 国产精品日韩专区| 久久一日本道色综合久久| 99视频精品| 蜜桃伊人久久| 午夜精品国产更新| 亚洲精品免费一区二区三区| 国产精品亚洲网站| 欧美成人国产| 午夜精品久久久久久久男人的天堂| 欧美黑人在线播放| 久久久久se| 中文欧美字幕免费| 一区二区视频免费在线观看 | 蜜臀av性久久久久蜜臀aⅴ| 99精品热视频只有精品10| 免费在线亚洲欧美| 欧美一级片一区| 欧美人与禽猛交乱配| 久久香蕉国产线看观看网| 午夜精品www|