【问题标题】:Why isn't SDL2 able to load my .bmp in Xcode? (SDL_LoadBMP)为什么 SDL2 不能在 Xcode 中加载我的 .bmp? (SDL_LoadBMP)
【发布时间】:2020-04-16 08:50:30
【问题描述】:

我正在尝试通过 SDL_LoadBMP 函数将 .bmp 文件加载到我在 Xcode 中的 SDL 项目中。 我尝试将要加载的文件放在项目调试文件夹中并尝试输入完整的搜索路径,但都没有奏效。通过使用 SDL_GetError,我收到消息“无法打开 ‎hello_world.bmp”。

#include <stdio.h>
#include <SDL.h>

int main(){

    SDL_LoadBMP("‎⁨⁨hello_world.bmp");
    printf("%s\n", SDL_GetError());

    SDL_Quit();
    return 0;
}

【问题讨论】:

  • 打开失败可能表示找不到文件,但也可能表示程序没有读取文件所需的权限。首先返回通过完整路径打开文件(并验证该路径)。如果这不能解决问题,请通过在其他图像查看器中打开文件来检查您对文件的权限。

标签: c xcode sdl sdl-2 bmp


【解决方案1】:

我收到了同样的错误消息“无法打开 x.bmp”。 以下是对我有用的方法以及我希望立即找到的方法(使用 SDL2 和 Xcode 12):

.bmp 文件必须保存的目录才能使SDL_LoadBMP() 工作(至少对我而言)是:

/Sunday3/DerivedData/Sunday3/Build/Products/Debug/Sunday3.app/Contents/Resources

NOT 在与.exe 文件相同的目录中,该文件位于:

/Sunday3/DerivedData/Sunday3/Build/Products/Debug/Sunday3.app/Contents/MacOS

这两个位置都从项目根目录开始,而不是 PC 根目录。

我通过使用fopen 并将.txt 文件与.exe 放在同一目录中(正如您通常所做的那样)解决了该问题,并且正如预期的那样,它们没有打开。

【讨论】:

    【解决方案2】:

    验证后SDL2显示消息"Couldn't open %s", filename如果cpp函数fopenfopen_s返回nullptr但SDL2没有显示/使用fopen设置的errno。
    所以我们可以猜到您没有为 bmp 文件设置正确的路径,该路径需要相对于可执行文件或绝对路径。

    【讨论】:

    • 当我使用 SDL 图像库时,我可以加载具有相同路径的文件。也许这与 Mac 无法加载 .bmp 文件有关?
    • 我仍然认为问题与您输入的路径直接相关,因为在内部,SDL_Image 的函数IMG_Load() 使用函数SDL_RWop()(与SDL_LoadBMP() 中使用的函数相同)这是写的在official documentation.
    猜你喜欢
    • 1970-01-01
    • 2016-09-13
    • 2022-01-02
    • 1970-01-01
    • 2020-11-12
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多