加载相对于二进制文件的图像

时间:2012-07-02 08:56:53

标签: c++ sdl

我试图将一些图像加载到一个非常基本的基于C ++ / SDL的程序中。使用SDL_LoadBMP加载图像。我有图像加载,一切似乎都很完美。我的问题是图像是相对于我调用程序的位置加载的。

所以我有一个像这样的目录结构。

project/
    src/
        source.cpp
    assets/
        image.bmp
    bin/
        program

当我从项目目录(./bin/program)执行程序时,它必须使用assets/image.bmp的路径来加载图像。有什么方法可以使用../assets/image.bmp的相对路径,这样程序可以在任何地方执行吗?

我认为我需要提供程序的绝对路径的东西,然后我可以追加到我的路径。

2 个答案:

答案 0 :(得分:3)

在Linux上,/proc/self/exe是指向当前进程可执行文件的符号链接。因此,您可以使用readlink查找其路径。从那里你可以使用通常的路径操作来查找你的资源。也许您应该满足程序可执行文件再次成为二进制文件所在位置的符号链接的情况,即只要当前路径是符号链接,就可以进行更多的实现。

曾经有一个关于finding current executable's path without /proc/self/exe的问题也询问了便携式界面,但是在接受的答案中没有给出满足所有需求的单一解决方案。

答案 1 :(得分:2)

在Windows中:

  1. GetModuleFileName(NULL, ...为您提供二进制文件的完整路径
  2. PathRemoveFileSpec(...只保留目录
  3. 上面第2项结果的
  4. PathCombine(..., _T("..\\..\\image.bmp"))可以获得图片的完全限定路径