【问题标题】:lodepng, stb_image. Nothing works in my system for image loading in C++lodepng,stb_image。在我的系统中没有任何东西可以在 C++ 中加载图像
【发布时间】:2015-05-01 08:13:30
【问题描述】:

我正在尝试将 png 或 bmp 加载到我的程序中。但是我在网上找到的库都没有。我不知道为什么,但是在使用 lodepng 时,每个 png 总是得到“不正确的 PNG 签名,它不是 PNG 或损坏”。使用 SDL_loadBMP 时每个 bmp 的“未知像素格式”。使用 stb_image 时每个 png 的“未知图像类型”。

我无法加载任何内容。也许我的系统有问题?我正在使用 OSX Yosemite。这是代码。

#include <iostream>
#include <string>
#define STB_IMAGE_IMPLEMENTATION

#include <lodepng.h>
#include <stb_image.h>

using namespace std;

int main (){
    string name = "res/img_test.png";
    const char * cstr = name.c_str();

    //lodepng
    unsigned char *buffer;
    unsigned int w,h;
    int result = lodepng_decode32_file(&buffer, &w, &h, cstr);
    cout << lodepng_error_text(result) << endl;

    //stb_image
    int x, y, comp;

    FILE *f = fopen(cstr, "rb");
    unsigned char *res;
    res = stbi_load_from_file(f,&x,&y,&comp,0);
    fclose(f);

    cout << stbi_failure_reason() << endl;

    return 0;
}

我正在使用最新的 cmake 通过 gcc 构建它。任何建议表示赞赏,但请考虑这一点。我尝试了很多文件(由我生成或从互联网上获取)。与这些库的其他用户一起测试了相同的文件。他们的代码有效,而我的无效。

编辑:

这里是完整cmake项目的源代码>> github.com/onatbas/png_load_test.git

【问题讨论】:

  • 除非您调用的函数实际失败,否则不要打印错误消息。例如,lodepng_decode32_filestbi_load_from_file 返回什么?哦,我假设您要加载的文件是实际的 PNG 图像,可以从其他程序加载?
  • 它们确实返回错误值。例如 lodepng 返回 28 代表“损坏的 png 标头”。它正在检查 png 标头,我逐字节跟踪它。 1 1 1 1 0 0 0 1 。它看起来像这样。 5th 6th 7th 字节错误。但是对于每个png???? stb_image 也是一个错误值。您也可以说因为尺寸仍然是 0 0。并且缓冲区是空的,当将其加载到 opengl texture2d 时,什么都没有加载,一切都是黑色的。对于 bmps(我尝试使用 SDL2)我得到这个 >> SDL_error "SDL 错误:文件不是 Windows BMP 文件"
  • 如果这些字节位于图像的开头,那么它绝对不是 PNG 图像,其标头应以 like this 开头。
  • 不 这只是一个跟踪,如果字节是他们应该的。第 5、6 和 7 个字节不匹配。但就像我说的,对于每个 png。我也尝试了这些图像库的测试文件。我有一些朋友给我发了一些在他们的电脑上测试过的 png,但无法在我的电脑上加载。
  • 您是否使用协议通过网络传输文件,例如行尾翻译?因为如果您查看我在之前的评论中链接到的标头,就会发现这些字节是用来检测这类问题的。你看过十六进制编辑器中的前八个字节吗?可以给我们看看吗?

标签: c++ image load png sdl


【解决方案1】:

我解决了!谢谢大家试图提供帮助。 毕竟,这不是代码问题。这是一个配置问题。我的 cmake 脚本在尝试将它们复制到目标文件夹时损坏了 png 和 bmp。代码很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2017-09-25
    • 1970-01-01
    • 2023-03-17
    • 2011-10-21
    相关资源
    最近更新 更多