【问题标题】:SDL2 > PNG IMAGE > couldn't load the imageSDL2 > PNG IMAGE > 无法加载图像
【发布时间】:2020-11-04 00:15:20
【问题描述】:

情况

我想在我的应用程序中加载和使用我的图像(即 .png)。但是,当我尝试加载图像时,出现以下错误

./sources/texture.c:9 处的错误:'纹理为 NULL'

> 无法打开 pawn.png

代码

texture.c

texture_t*
texture_load(renderer_t *renderer, const char *path) {
    texture_t *tex = IMG_LoadTexture(renderer, path);

    if (tex == NULL)
        error_print(AT, "The texture is NULL");

    return tex;
}

game.c

game_t*
game_create() {
    ...
    IMG_Init(IMG_INIT_PNG);
    ...
    texture_load(renderer, "pawn.png")
    ...
}

文件夹结构

.
├── build
│   ├── app
│   └── pawn.png
├── headers
│   ...
│   ├── game.h
|   ...
│   ├── texture.h
│   ...
├── resources
│   └── pawn.png
└── sources
    ...
    ├── game.c
    ...
    ├── texture.c
    ...

奖金

如果您想查看我的项目的整个“图像”,那么您可以点击here

【问题讨论】:

    标签: c sdl sdl-2


    【解决方案1】:

    也许这是一个愚蠢的假设,但你确定文件在当前应用程序目录中吗?

    在 POSIX 系统上,您可以通过以下方式对其进行检查:

    if (access("pawn.png", F_OK) == 0) {
        printf("File exists\n");
    } else {
        printf("File doesn't exist\n");
    }
    

    如果它打印File doesn't exist,那么您需要指定文件的完整路径。

    【讨论】:

    • 我目前遇到了 F_OK 的问题,它说 F_OK 未声明。注意:我正在运行 Manjaro
    • 是的,我愿意。我应该包含一些标题吗?可悲的是在互联网上找不到有用的东西。
    • 现在它可以工作了...它打印出“文件不存在”,但是如何?
    • 抱歉忘记添加“build/pawn.png”... 现在说该文件存在。注意:应用程序也在构建文件夹中。但是,如果应用程序位于 build 文件夹中,这并不意味着它应该可以在没有包含 build 的情况下工作到 build/pawn.png
    • 当您尝试打开"pawn.png" 时,这意味着它将尝试从当前应用程序目录打开它,这是一个运行时应用程序设置。显然,该文件在那里不存在。我建议指定文件的完整路径。仅出于测试目的,您可以将PNG文件放入/tmp目录,然后尝试加载"/tmp/pawn.png"。我确信它会正常工作。这样我们就知道 SDL 库工作正常,PNG 文件也很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 2015-04-05
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    相关资源
    最近更新 更多