3

我一直在学习本教程,并且已经到了指导我们如何加载和使用位图的地步。这是当前代码:

#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 的目录中)还是指定整个路径到代码中的图像(如 SDL_LoadBMP("C:\Dir\hello world.png")) hello获得 NULL。

我究竟做错了什么?

操作系统是 Windows


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

4

2 回答 2

1

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

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

于 2012-11-12T16:30:03.690 回答
0

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

于 2012-11-12T19:48:08.447 回答