支持HW团队,就支付宝领取下面的红包吧! (打开支付宝就能领取!er1OEj73Uj), (打开支付宝收索“516503473”), 你领取消费,HW有奖励。红包使用无条件限制,有条件请注意是不是有病毒。

Login or Sign up | Validate
| Search

博主:初学MPEG

初学MPEG 本博客-采用Python的web框架Django与Mysql数据库,致力于对Python、Django的了解 与研究
Django技术QQ群:XXXXXXX
Python技术QQ群:XXXXXXX

Category

Keywords

本站最新博文

友情链接  

[转]SDL读取其它格式的图片

类别:游戏 状态:游客可见,可回,会员可关联(良好) 阅读:4041 评论:0 时间:May 12, 2013, 12:07 a.m.
关键字:SDL

  来源: http://www.cppblog.com/lf426/archive/2008/03/19/44831.html   作者:龙飞

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(),将读取的图片文件转换为适合显示的格式。
如果转换失败,或者内存溢出,这个函数将返回空指针。

我们有自己的配置约定,请看 [原]开发环境配置(boost log4cxx ACE SDL 等)

操作:

Please Login (or Sign Up) to leave a comment