stbi_load不返回任何值

时间:2018-03-24 08:50:12

标签: c++ stb-image

我正在尝试将带有stb_image的图像加载到unsigned char*。代码如下:

#define STB_IMAGE_IMPLEMENTATION
#include <stb_image.h>

namespace rhino {

    Texture::Texture(const std::string& file) {
        stbi_set_flip_vertically_on_load(1);

        buffer = stbi_load(file.c_str(), &width, &height, &bpp, 4);
         ...

bufferbppwidthheight变量在Texture类中声明。在stbi_load调用之后,widthheightbpp为0.我确定文件路径是正确的,但即使我输入错误的路径,相同的结果也是发生的历史。如果发生错误但是没有打印文本,我不知道是否应该将stbi_image打印到控制台。

[编辑] 如果stb_image无法读取图像,有人真的知道会发生什么吗?

2 个答案:

答案 0 :(得分:0)

我猜你必须使用绝对路径,因为你的stb_image.h位于项目目录之外的某个地方。这样,它将从标题所在的目录中查找图像的相对路径,而不是在项目目录中。

您有两种方法可以解决此问题:

  • 使用绝对路径

  • 将stb_image.h移动到项目目录中,最好是根目录

答案 1 :(得分:0)

您始终可以使用stbi_failure_reason()来获取发生问题的提示。如果stbi_load()工作正常,则stbi_failure_reason()返回null。如果不是,则返回实际错误。

let state = {
  'choice0': true,
  'choice1': false,
  ...
}

在您的情况下,如果您使用相对路径而不是绝对路径,它将返回一条消息“无法打开”。这样,您可能已经猜到了它指向错误的文件夹。如果STBI不支持您使用的图像类型,则您将收到一条消息“未知图像类型”,依此类推。