无法使用SDL_LoadBMP加载图像

时间:2013-11-17 18:25:51

标签: c++ sdl sdl-2

我对SDL1.2的经验非常有限,我也尝试迁移到SDL2.0。 这是一个简单的Tic Tac Toe游戏,下面的类在初始化时加载我的图像。我无法准确指出我的问题,但是我得到一个带代码-1的退出,因为它无法加载我的位图。我想要的结果是返回TRUE。 代码最初来自http://www.sdltutorials.com/sdl-tutorial-tic-tac-toe,但我对迁移到SDL2.0进行了一些更改。

bool CApp::OnInit() {

if(SDL_Init(SDL_INIT_EVERYTHING) < 0) { return false; }

SDL_CreateWindowAndRenderer(600, 600, SDL_WINDOW_RESIZABLE, &sdlWindow, &sdlRenderer);

if((Surf_Grid = CSurface::OnLoad("./gfx/grid.bmp")) == NULL) { return false; }
if((Surf_O = CSurface::OnLoad("./gfx/o.bmp")) == NULL) { return false; }
if((Surf_X = CSurface::OnLoad("./gfx/x.bmp")) == NULL) { return false; }

Reset();

return true;}

我认为问题出在CSurface :: Onload()中,所以我在函数中插入一个断点,但项目在没有到达断点的情况下运行。似乎似乎没有调用CSurface :: Onload()函数。

C表面::的Onload():

SDL_Surface* CSurface::OnLoad(char* File) {
SDL_Surface* Surf_Temp = NULL;
SDL_Surface* Surf_Return = NULL;

if((Surf_Temp = SDL_LoadBMP(File)) == NULL) { return NULL; }

Surf_Return = SDL_ConvertSurfaceFormat(Surf_Temp,SDL_PIXELFORMAT_UNKNOWN,0);    /* OUTDATED SDL 1.2 : Surf_Return = SDL_DisplayFormat(Surf_Temp); */
SDL_FreeSurface(Surf_Temp);
return Surf_Return;}

知道我在这里做错了什么???

2 个答案:

答案 0 :(得分:1)

花了一些时间,但终于发现问题在于函数SDL_ConvertSurfaceFormat()的像素格式字段 我几乎不知道这些字段是什么意思,但只需使用SDL_PIXELFORMAT_ARGB8888解决问题

http://wiki.libsdl.org/SDL_ConvertSurfaceFormat

解决。 =)

答案 1 :(得分:0)

如果您在Windows环境中进行编译,您是否尝试在路径表示法中使用反斜杠而不是正斜杠来进行CSurface::OnLoad()方法调用?