日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【Visual C++】游戏开发笔记之五——游戏画面绘图(二)绘制位图

發(fā)布時間:2025/3/20 81 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Visual C++】游戏开发笔记之五——游戏画面绘图(二)绘制位图 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本系列文章由zhmxy555編寫,轉(zhuǎn)載請注明出處。?http://blog.csdn.net/zhmxy555/article/details/7335103

作者:毛星云????郵箱:?happylifemxy@qq.com????歡迎郵件交流編程心得



以游戲文件來說,使用的位圖數(shù)量相當多,因此都會先將位圖存成文件,等到程序需要時再將文件加載到窗口中。將位圖從文件加載帶繪圖窗口中必須經(jīng)過一下幾個步驟。

<1>從文件中加載位圖對象

<2>建立一個與窗口DC兼容的內(nèi)存DC

<3>內(nèi)存DC只用步驟1中所建立的位圖對象

<4>將內(nèi)存DC的內(nèi)容粘貼到窗口DC中,完成顯像操作。


下面進行這四個步驟的詳細說明:


步驟一:加載位圖

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

HANDLE?LoadImage(?

????HINSTANCE?hinst,??//包含目標位圖的DLL或exe文件的模塊句柄

LPCTSTR?lpszName,?

UINT?uType,???????

int?cxDesired,??????

????int?cyDesired,??????

????UINT?fuLoad??????

);

下面是該函數(shù)參數(shù)的詳細說明。

▲HINSTANCE??來源實體:包含位圖所在的實體,若要加載的位圖在硬盤或者資源文件中,此項設(shè)置為"NULL"。

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

▲UINT?位圖類型:加載位圖的類型,有下面三種:

★IMAGE_BITMAP:?加載的位圖為一般圖文件,擴展名為".bmp"

★IMAGE_CUSOR:?加載的位圖為光標圖標,擴展名為".cur"

★IMAGE_ICON:?加載的位圖為圖標,擴展名為".ico"

▲int?加載寬度:位圖加載的寬度,單位為像素

▲int?加載高度:位圖加載的高度,單位為像素

▲UINT?加載方式:設(shè)定位圖的加載方式,若是從文件中加載位圖,則設(shè)為"LR_LOADFROMFILE"


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

我們調(diào)用CreateCompatible()函數(shù)來建立內(nèi)存DC

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

函數(shù)中輸出的唯一參數(shù)就是要與內(nèi)存DC兼容的目的DC

跟窗口DC一樣,內(nèi)存DC使用后也必須進行釋放的操作,釋放內(nèi)存DC所調(diào)用的函數(shù)為DeleteDC()

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


步驟三:選用位圖對象

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


步驟四:貼圖

把內(nèi)存DC中的位圖復(fù)制到顯示的DC上,即"貼圖"。這個操作使用的函數(shù)是BitBlt(),后面我們會經(jīng)常用到他。這個函數(shù)的定義如下

BOOL?BitBlt(

???int?x,????????????//??目的DC?x坐標

???int?y,????????????//??目的DC?y坐標

???int?nWidth,???????//??貼到目的DC的寬度

???int?nHeight,??????//??貼到目的DC的高度

???CDC*?pSrcDC,???//??來源DC

???int?xSrc,?????????//??來源DC?x坐標

???int?ySrc,?????????//??來源DC?y坐標

???DWORD?dwRop??//??貼圖方式();

);



下面我們用一個實例來看看如何從文件中加載位圖:

#include "stdafx.h" #include "stdafx.h" //全局變量聲明 HINSTANCE hInst; HBITMAP hbmp; HDC mdc; //全局函數(shù)的聲明 ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void MyPaint(HDC hdc); //**** ?著作權(quán)歸作者所有:來自51CTO博客作者poem淺墨的原創(chuàng)作品,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任 c++ 游戲 擴展

0

微博 QQ 微信

收藏

上一篇:【超級經(jīng)典】程序員裝B指南(轉(zhuǎn)) 下一篇:寫好代碼的一些基本原理 poem淺墨

121篇文章,8W+人氣,0粉絲

轉(zhuǎn)載于:https://blog.51cto.com/8241237/1348051

總結(jié)

以上是生活随笔為你收集整理的【Visual C++】游戏开发笔记之五——游戏画面绘图(二)绘制位图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。