我正在使用stb_image_load加载一个png文件。代码看起来像这样
stbi_uc* pixels = stbi_load("textures/viking_room.png", &texWidth, &texHeight, &texChannels, STBI_rgb_alpha);
...
if (stbi_failure_reason()) std::cout << stbi_failure_reason();
if (!pixels) throw std::runtime_error("failed to load texture image!");
现在,stbi_failure_reason() 返回
no SOI
,但pixels
不为空,并且完美地加载纹理。关于此问题的github上的第一个结果是关于畸形的png头文件,因此我使用pngcheck进行了检查,但它显示png文件没有问题。您有任何想法为什么会发生这种情况吗?我也遇到了加载此image的困难,但对于其他图像可以工作,有没有办法在将来避免这种情况?
stbi_load
返回NULL
时检查错误。看起来它返回了一个有效的指针,这表明没有错误。如果你阅读代码,它会检查不同的文件类型,直到找到与之匹配的类型。JPEG被检查在PNG之前,这就是为什么消息被设置为“no SOI”的原因。 - Retired Ninja