【问题标题】:SFML loadFromFile doesn't work, weird errorSFML loadFromFile 不起作用,奇怪的错误
【发布时间】:2019-10-19 15:07:27
【问题描述】:

我正在尝试在 SFML 中加载纹理,但它不起作用。好像程序甚至都不知道 JPG 的存在。

sf::Texture table;
    if (!table.loadFromFile("pool-table.jpg"))
    {
        std::cout << "Error!" << std::endl;
        return -1;
    }

我遇到了这样的错误:

Error!
Failed to load image "

我应该怎么做才能解决这个问题?

【问题讨论】:

  • 我应该怎么做才能解决这个问题? 图像与项目是否在同一个文件夹中?或者您是否在项目的 Visual Studio 调试器设置中更改了工作目录的默认设置?如果图像在项目文件夹中,请确保它没有被命名为 pool-table.jpg.jpg。 Windows 隐藏扩展名可能会导致意外创建带有 2 个扩展名的文件,因为这会使文件更难查看。
  • 图片与main.cpp在同一个文件夹中,图片命名正确

标签: c++ visual-studio sfml


【解决方案1】:

路径很可能是问题所在。您可以使用相对路径或绝对路径来实现此目的。您当前使用的是相对路径,因此您的文件必须位于程序的当前工作目录中。

为确保路径是问题所在,您可以使用绝对路径进行尝试,如下所示:

myTexture.loadFromFile("C:/Projects/MyProject/Media/myImage.png")

如果它以这种方式工作,您就知道问题不是代码,而是路径。

如果在测试后这仍然是一个问题,这里有一个可以节省一天的好技巧:就在加载图像之前,插入这行代码:

system("dir");

它将当前工作目录发送到控制台。当您键入它们时,您的相对路径应该考虑这些信息。

祝你好运!

【讨论】:

  • 我也试过这个。没有任何效果:/ system("dir"); 显示 jpg 在工作目录中,但 loadFromFile() 没有看到它
  • 正如@drescherjm 在 cmets 中所说,检查隐藏的扩展。问题真的,真的似乎是路径。另外:您使用的是 32 位还是 64 位版本的 SFML?一些 64 位版本的人通过切换到 32 位版本成功解决了此类问题(混合 x64 和 x86 库是不好的,可能会导致此问题)。
【解决方案2】:

感谢cmets!我已将配置从调试更改为发布,一切终于开始工作:D

【讨论】:

  • 可能您遇到了库冲突。您确定您使用调试库进行调试配置吗?
  • 是的,我遇到了库冲突。我在调试配置中使用了错误的库(没有“-d”)。我已经链接了正确的,现在纹理正在正确加载。
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2018-05-23
  • 2013-12-31
  • 2013-05-27
  • 1970-01-01
相关资源
最近更新 更多