• <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++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              117 Posts :: 2 Stories :: 61 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(8)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜


                繪圖是屬于
            GDI的對(duì)象之一,在一套游戲開發(fā)過程中,常常需要運(yùn)用大量的位圖來構(gòu)建游戲的所有畫面。
                以游戲程序來說,由于使用的位圖數(shù)量相當(dāng)多,因此都會(huì)先將位圖存成文件,等到程序需要時(shí)再將文件加載到窗口中。
                將位圖從文件中加載到繪制窗口中必須經(jīng)過以下幾個(gè)步驟:
                ①從文件中加載位圖(
            BITMAP)對(duì)象。
                ②建立一個(gè)與窗口
            DC兼容的內(nèi)存DC
                ③內(nèi)存
            DC使用步驟1所建立的位圖對(duì)象。
                ④將
            內(nèi)存DC的內(nèi)容粘帖到窗口DC中,完成顯像的操作。


                以上是大致的流程,接下來一步步地說明如何完成這些操作

            步驟一:加載位圖

                要從文件加載位圖,常使用LoadImage()函數(shù)

            HANDLE LoadImage(   HINSTANCE 來源實(shí)體,   //加載位圖
                                                     
            LPCTSTR 名稱,
                                                      UINT 位圖類型,
                                                     
            int 加載寬度,
                                                     
            int 加載高度,
                                                     UINT 加載方式,);

                 詳細(xì)說明如下: 

            參數(shù)

            說明

            HINSTANCE

            包含位圖所在的實(shí)體,若要加載的位圖存在于硬盤或者資源文件中,則將此項(xiàng)參數(shù)設(shè)為”NULL”

            LPCTSTR

            要加載位圖所在的路徑與文件名或者資源名稱

            UINT

            加載位圖的類型,有下列3種:

            ◆IMAGE_BITMAP:加載的位圖為一般圖文件,擴(kuò)展名為“.bmp”

            ◆IMAGE_CURSOR:加載的位圖為光標(biāo)圖標(biāo),擴(kuò)展名為“.cur”

            ◆IMAGE_ICON:加載的位圖為圖標(biāo),擴(kuò)展名為“.ico”

            int

            位圖加載的寬度,單位為像素

            int

            位圖加載的高度,單位為像素

            UINT

            設(shè)定位圖的加載方式,若是從文件中加載位圖,則設(shè)為“LR_LOADFROMFILE

            步驟二:建立與窗口DC兼容的內(nèi)存DC

                 內(nèi)存DC并不是真正的設(shè)備的DC,在這里把它揭示為一個(gè)緩沖區(qū)或許會(huì)更恰當(dāng)些。內(nèi)存DC用來暫存加載的位圖,由于最終會(huì)把存儲(chǔ)在這個(gè)內(nèi)存DC上的位圖貼到真正的窗口的DC上,因此這個(gè)內(nèi)存DC必須跟窗口DC的性質(zhì)兼容。可調(diào)用CreateCompatibleDC()函數(shù)來建立內(nèi)存DC

            HDC CreateCompatibleDC(HDC hdc); // 建立兼容DC

                函數(shù)中輸入的唯一參數(shù)就是要與內(nèi)存DC兼容的目的DC跟窗口DC一樣,內(nèi)存DC使用后也必須進(jìn)行釋放的操作,釋放內(nèi)存DC所調(diào)用的函數(shù)為DeleteDC()

            DeleteDC(HDC DC名稱); //釋放DC

            步驟三:選用位圖對(duì)象

                位圖對(duì)象是GDI6種對(duì)象之一,內(nèi)存DC選用位圖對(duì)象的方法和前面介紹的選用畫筆或畫刷的方式相同,都是通過調(diào)用SelectObject()函數(shù)來實(shí)現(xiàn)。

            步驟四:貼圖

                把內(nèi)存DC中的位圖復(fù)制到顯示的DC上,這個(gè)操作被稱為“貼圖”。函數(shù)是BitBlt()

            BOOL BitBlt (   HDC 目的DC,
                                      
            int 目的DC X坐標(biāo),
                                      
            int 目的DC Y坐標(biāo),
                                      
            int 貼到目的DC的寬度,
                                      
            int 貼到目的DC的高度,
                                       HDC 來源DC,
                                      
            int 來源DC X坐標(biāo),
                                      
            int 來源DC Y坐標(biāo),
                                       DWORD 貼圖方式)

                BitBlt()函數(shù)最后一個(gè)參數(shù)所輸入的是稱為“Raster”的運(yùn)算值,這個(gè)值是用來設(shè)定內(nèi)存DC到目的DC的貼圖方式。范例中輸入的Raster值是SRCCOPY,表示貼圖后的位圖與原來的位圖完全一樣,下表列出了可使用的Raster值及說明。

            Raster

            說明

            BLACKNESS

            將來源位圖轉(zhuǎn)換為黑色

            DSTINVERT

            將目的地DC做“NOT”運(yùn)算

            MERGECOPY

            將選擇的筆刷與來源位圖做“AND”運(yùn)算

            MERGEPAINT

            先將來源位圖做“NOT”運(yùn)算,再與目的地DC做“OR”運(yùn)算

            NOTSRCCOPY

            將來源位圖做“NOT”運(yùn)算

            NOTSRCERASE

            先將來源位圖與目的地DC做“OR”運(yùn)算,再將其做“NOT”運(yùn)算

            PATCOPY

            將選擇的筆刷貼到目的地DC

            PATINVERT

            將目的地DC與選擇的筆刷做“XOR”運(yùn)算

            PATPAINT

            先將來源位圖做“NOT”運(yùn)算,再與筆刷做“OR”運(yùn)算,最后再與目的地DC做“OR”運(yùn)算

            SRCAND

            將來源位圖與目的地DC做“AND”運(yùn)算

            SRCCOPY

            將來源位圖貼到目的地DC

            SRCERASE

            先將目的地DC做“NOT”運(yùn)算,再與來源位圖做“AND”運(yùn)算

            SRCINVERT

            將來源位圖與目的地DC做“XOR”運(yùn)算

            SRCPAINT

            將來源位圖與目的地DC做“OR”運(yùn)算

            WHITENESS

            將來源位圖轉(zhuǎn)換為白色

            范例ch2_5:從文件中加載位圖,并顯示在窗口上。
            下載地址:ch2_5(上傳到windows live空間,可能需要MSN賬號(hào)登陸)
            說明:程序源代碼中有相關(guān)的注釋。
            程序運(yùn)行結(jié)果如下圖:



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

            亚洲精品乱码久久久久久不卡| 久久久久久国产精品免费免费| 久久精品国产亚洲αv忘忧草| 久久综合亚洲色HEZYO社区| 人人狠狠综合久久88成人| 国产精品VIDEOSSEX久久发布| 人人狠狠综合88综合久久| 国产美女久久精品香蕉69| 久久亚洲天堂| 国产精品久久久久…| 色青青草原桃花久久综合| 亚洲国产天堂久久综合网站| 无码八A片人妻少妇久久| 97久久精品人人做人人爽| 午夜精品久久久久久久| 久久中文字幕视频、最近更新 | 久久久国产精华液| 国产精品欧美亚洲韩国日本久久 | 国产精品久久久久久一区二区三区| 中文成人久久久久影院免费观看| 国产精品久久永久免费| 久久男人Av资源网站无码软件 | 久久电影网一区| 精品久久久久久无码专区不卡| 欧美伊人久久大香线蕉综合 | 久久久久久久97| 亚洲精品乱码久久久久久蜜桃图片 | 香蕉久久av一区二区三区| 久久综合亚洲色HEZYO社区| 理论片午午伦夜理片久久| 99久久婷婷国产综合精品草原| 精品国产乱码久久久久久1区2区| 久久亚洲国产成人精品性色| 无码人妻精品一区二区三区久久| 一本一本久久A久久综合精品| 日产精品久久久久久久| 亚洲中文字幕无码久久综合网| 亚洲国产精品无码久久久秋霞2 | 国产精品久久亚洲不卡动漫| 99久久亚洲综合精品网站| 久久精品成人免费国产片小草|