【问题标题】:SDL_LoadBMP only returning NULLSDL_LoadBMP 只返回 NULL
【发布时间】:2012-11-13 11:38:50
【问题描述】:

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

我做错了什么?

操作系统是 Windows


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

【问题讨论】:

    标签: c++ sdl codeblocks


    【解决方案1】:

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

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

    【讨论】:

    • 是的,我有。虽然看起来它与 CodeBlocks 的链接和/或搜索有关。我刚刚尝试打开另一个运行良好的项目,但现在它找不到我包含的其中一个库的路径,该库与.cbp 位于同一目录中。我编辑了 Compiler 和 Debugger 设置,分别搜索和链接 SDL 的 include 和 bin 目录。我会稍微解决一下。
    • 好吧,不是这样。但我可以确定我已经尝试过你的建议。
    • 您可以将 png 文件放在可执行文件所在的位置并手动启动它(而不是通过代码块)并查看它是否加载?
    • XCode 怎么样?我也得到了 NULL,但我想我不需要 DLL。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多