2

我正在尝试将一些带有 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);
         ...

、和变量在类buffer中声明。调用后,和为0。我确定文件路径是正确的,但即使我输入了错误的路径,也会出现相同的结果。我不知道如果发生错误,stbi_image 是否应该在控制台上打印一些东西,但那里没有打印任何文本。bppwidthheightTexturestbi_loadwidthheightbpp

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

4

2 回答 2

1

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

您有两种选择来解决此问题:

  • 使用绝对路径

  • 将 stb_image.h 移动到您的项目目录,最好在它的根目录下

于 2018-03-24T10:30:15.967 回答
1

您始终可以使用 stbi_failure_reason() 来提示出现了什么问题。如果 stbi_load() 工作正常,则 stbi_failure_reason() 返回 null。如果不是,则返回实际错误。

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

  if(stbi_failure_reason())
    std::cout << stbi_failure_reason();

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

于 2019-04-29T20:02:54.060 回答