使用.app捆绑包时无法加载图像

Unable to load an image when using a .app bundle

本文关键字:加载 图像 包时无 app 使用      更新时间:2023-10-16

我正在尝试用Xcode在Mac OS X lion中设置SDL。到目前为止,除了加载图像外,我似乎什么都能用。(使用SDL_image)我使用以下代码,当通过命令行编译代码而不制作.app时,这些代码将起作用,但在Xcode设置中不起作用。

SDL_Surface* load_image( std::string filename ) 
{
    SDL_Surface* loadedImage = NULL;
    SDL_Surface* optimizedImage = NULL;
    loadedImage = IMG_Load( filename.c_str() );
    if( loadedImage != NULL )
    {
        optimizedImage = SDL_DisplayFormatAlpha( loadedImage );
        SDL_FreeSurface( loadedImage );
    } else {
        std::cout << "Error loading image: " << filename << " Error:"<< std::endl << SDL_GetError() << std::endl;
    }
    return optimizedImage;
}

当调用这个函数时,我得到一个空指针,控制台显示:

Error loading image: puppy.png Error:
Couldn't open puppy.png

我查看了捆绑包,puppy.png按预期放在Resources文件夹中。我也尝试过调用load_image("../Resources/puppy.png")或将puppy.pn移到MacOS文件夹中,但都不起作用。

文件的路径名是相对于当前工作目录的,这在从Xcode或Finder启动的程序中是不可预测的(在shell中,它基于上次运行cd的位置)。

除非函数的文档中说它会在应用程序捆绑包中搜索文件名,否则你不能真的认为它会这样做。相反,查看NSBundle类,并使用这些方法自动查找位于Resources等位置的文件的完整路径;然后在这种情况下将该完整路径传递给图像加载器。