SDL入门教程(六):SDL读取其它格式的图片

作者:龙飞

1:扩充库(Extension Libraries)

        SDL本身所支持的,仅仅是读取bmp格式的图片。要使用其它格式的图片,我们需要使用SDL的扩充库。在下面地址,我们可以下载到相关文件 SDL_image-devel-1.2.6-VC8.zip
http://www.libsdl.org/projects/SDL_image/
        与SDL本身的设置一样,将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

        在编译的时候,gcc注意增加共同编译的库文件-lSDL_image,比如,我设置了一个批处理文件g++img.bat内容如下:
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构造函数

        我们现在可以回头过来修改我们在 SDL入门教程(五):6、对C++异常机制的思考,代码重写中的Display Surface类的构造函数,使其能够更加通用的读取其它格式的图片。
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);
        在上面的程序中,我们使用到了函数SDL_DisplayFormat()。在之前的教程中,我一直没有用到这个函数,是因为我还没有发现用SDL_LoadBMP()的时候会出现格式兼容性的问题——即使是图片位深与显示不一致。但是使用IMG_Load()的时候,小小的bug出现了。所以,这里我必须使用SDL_DisplayFormat(),将读取的图片文件转换为适合显示的格式。
        如果转换失败,或者内存溢出,这个函数将返回空指针。  
 
此篇文章来自【 http://blog.csdn.net/lf426/article/details/2215032
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值