0

我正在通过 加载图片stbi_load,但出现了错误no SOI。我在另一个项目中使用了该图片,并且加载成功。所以我认为图片和图片的路径是有效的。但是我不知道为什么会发生错误?以下是一些主要代码:

// Texture2D is a class of textures 
Texture2D ResourceManager::loadTextureFromFile(const GLchar *file, GLboolean alpha){
    // create texture object
    Texture2D texture;
    if (alpha){
        texture.Internal_Format = GL_RGBA;
        texture.Image_Format = GL_RGBA;
    }
    // load picture
    int width, height, nrChannels;
    unsigned char *image = stbi_load(file, &width, &height, &nrChannels, 0);
    if (stbi_failure_reason())
        std::cout << stbi_failure_reason() << std::endl;
    // generate texture
    texture.Generate(width, height, image);
    // free image
    stbi_image_free(image);
    return texture;
}

loadTextureFromFile("./Data/awesomeface.png", GL_TRUE);用来获取纹理。并stbi_failure_reason()返回no SOI。当我在VS2013中调试项目时,内存image有效但显示characters in a string are invalid. 有人帮忙吗?

4

2 回答 2

0

来自我在磁盘上找到的一个旧项目。我不再习惯 C++,所以我不确定它是否与您的问题有关,但我想我正在看 C++ 代码?

  auto textureBuffer = stbi_load("graphics/texture.png", &width, &height, &bitppx, 4);

我发现了一些关于 stb 损坏的 .png 文件的信息

一些 PNG 看起来很像 JPEG,以至于 JPEG 文件格式测试会因“无 SOI”错误而中断,而不是将图像拒绝为 JPEG。

https://github.com/nothings/stb/issues/787

解决方案:

  • 检查您的文件路径是否正确

  • 检查不同的 .png 是否有效

  • 使用自动纹理缓冲区而不是无符号字符指针

于 2020-04-29T06:40:20.023 回答
0

尝试更新库(当前是 2.27)似乎已修复:

https://github.com/nothings/stb/issues/787

于 2022-02-27T01:40:29.887 回答