SDL_LoadBMP仅返回NULL

时间:2012-11-12 16:25:26

标签: c++ sdl codeblocks

我一直在关注this tutorial,我已经指明了如何加载和使用位图。这是当前的代码:

#include "SDL/SDL.h"
#include <stdlib.h>

int main (int arg, char *argc[]) {
    SDL_Surface* screen = NULL;
    SDL_Surface* hello = NULL;

    SDL_Init(SDL_INIT_EVERYTHING);

    screen = SDL_SetVideoMode (256, 256, 32, SDL_SWSURFACE);
    hello = SDL_LoadBMP("hello world.png"); // Here
    if (hello == NULL) exit(0);

    SDL_BlitSurface(hello, NULL, screen, NULL);
    SDL_Flip(screen);

    SDL_Delay(2000);

    SDL_FreeSurface(hello);

    SDL_Quit();

    return 0;
}
但是,你好,除了NULL之外,永远不会获得任何值。我正在使用Code :: Blocks,即使我将hello world.png分散到项目的所有可能目录中(无论是在bin,obj,Debug之一,带.cbp的目录中)还是指定整个路径in-code中的图像(如在SDL_LoadBMP(“C:\ Dir \ hello world.png”中))hello 变为NULL。

我做错了什么?

操作系统是Windows


编辑:好吧,显然SDL_LoadBMP只能加载.bmp文件!我真傻。

2 个答案:

答案 0 :(得分:1)

编辑:我将SDL_LoadBMP与IMG_Load混合在一起,这是我的新答案:

您可以使用SDL Image(包括SDL_Image.h,链接SDL_image.lib,并确保您的文件类型的正确DLL与您的二进制文件一起使用,如果需要)来调用IMG_Load。 IMG_Load将注意解决您的文件类型并使用适当的加载来创建新的SDL Surface。当你完成它时,请记得释放你的表面。

答案 1 :(得分:0)

是的,它只加载位图。您可以使用SDL_Image加载其他类型,例如png。

相关问题