作者:龍飛
1:擴(kuò)充庫(kù)(Extension Libraries)
SDL本身所支持的,僅僅是讀取bmp格式的圖片。要使用其它格式的圖片,我們需要使用SDL的擴(kuò)充庫(kù)。在下面地址,我們可以下載到相關(guān)文件
SDL_image-devel-1.2.6-VC8.zip。
http://www.libsdl.org/projects/SDL_image/ 與SDL本身的設(shè)置一樣,將include下的*.h文件拷貝到:
C:\MinGW\include\SDL (MinGW)
C:\Program Files\Microsoft Visual Studio 9.0\VC\include\SDL (VC2008)
將*.lib文件拷貝到:
C:\MinGW\lib (MinGW)
C:\Program Files\Microsoft Visual Studio 9.0\VC\lib (VC2008)
將*.dll文件拷貝到:
C:\WINDOWS\system32
在編譯的時(shí)候,gcc注意增加共同編譯的庫(kù)文件-lSDL_image,比如,我設(shè)置了一個(gè)批處理文件g++img.bat內(nèi)容如下:
g++ -o MySDL.exe main.cpp -lmingw32 -lSDLmain -lSDL -lSDL_image -mwindows
在VC2008中,需要在projec屬性中,Configuration Properties -- Linker -- Input -- Additional Dependencies 下增加SDL_image.lib。
在程序的頭文件中,需要增加:
#include "SDL/SDL_image.h"
2:更加通用的Display Surface構(gòu)造函數(shù)
我們現(xiàn)在可以回頭過來修改我們?cè)?a title=SDL入門教程(五):6、對(duì)C++異常機(jī)制的思考,代碼重寫 href="http://www.shnenglu.com/lf426/archive/2008/02/22/43095.html">SDL入門教程(五):6、對(duì)C++異常機(jī)制的思考,代碼重寫中的Display Surface類的構(gòu)造函數(shù),使其能夠更加通用的讀取其它格式的圖片。
DisplaySurface::DisplaySurface(std::string file_name, const ScreenSurface& screen):
fileName(file_name)
{
SDL_Surface* pSurfaceTemp = IMG_Load(file_name.c_str());
if ( pSurfaceTemp == 0 )
throw ErrorInfo(SDL_GetError());
pSurface = SDL_DisplayFormat(pSurfaceTemp);
if ( pSurface == 0 )
throw ErrorInfo(SDL_GetError());
SDL_FreeSurface(pSurfaceTemp);
pScreen = screen.point();
}
IMG_Load()可以讀取多種格式的圖片文件,包括BMP, PNM, XPM, LBM, PCX, GIF, JPEG, TGA和PNG。
3:將圖片修改為適合顯示的格式
SDL_Surface *SDL_DisplayFormat(SDL_Surface *surface);
在上面的程序中,我們使用到了函數(shù)SDL_DisplayFormat()。在之前的教程中,我一直沒有用到這個(gè)函數(shù),是因?yàn)槲疫€沒有發(fā)現(xiàn)用SDL_LoadBMP()的時(shí)候會(huì)出現(xiàn)格式兼容性的問題——即使是圖片位深與顯示不一致。但是使用IMG_Load()的時(shí)候,小小的bug出現(xiàn)了。所以,這里我必須使用SDL_DisplayFormat(),將讀取的圖片文件轉(zhuǎn)換為適合顯示的格式。
如果轉(zhuǎn)換失敗,或者內(nèi)存溢出,這個(gè)函數(shù)將返回空指針。
posted on 2008-03-19 11:03
lf426 閱讀(3984)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
SDL入門教程