C++ lodepng,机顶盒图像。在我的系统中,在C++;
我正在尝试将PNG或BMP加载到我的程序中。但我在网上找到的图书馆都不管用。我不知道为什么,但我总是得到“错误的PNG签名,它没有PNG或损坏”的每一个PNG当使用lodepng。使用SDL_loadBMP时,每个bmp的“未知像素格式”。使用stb_图像时,每个png的“未知图像类型” 我不能装任何东西。也许我的系统有问题?我用的是OSX约塞米蒂。这是代码C++ lodepng,机顶盒图像。在我的系统中,在C++;,c++,image,load,png,sdl,C++,Image,Load,Png,Sdl,我正在尝试将PNG或BMP加载到我的程序中。但我在网上找到的图书馆都不管用。我不知道为什么,但我总是得到“错误的PNG签名,它没有PNG或损坏”的每一个PNG当使用lodepng。使用SDL_loadBMP时,每个bmp的“未知像素格式”。使用stb_图像时,每个png的“未知图像类型” 我不能装任何东西。也许我的系统有问题?我用的是OSX约塞米蒂。这是代码 #include <iostream> #include <string> #define STB_IMAGE_I
#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;
}
#包括
#包括
#定义机顶盒映像的实现
#包括
#包括
使用名称空间std;
int main(){
string name=“res/img_test.png”;
const char*cstr=name.c_str();
//洛德邦
无符号字符*缓冲区;
无符号整数w,h;
int result=lodepng\u decode32\u文件(&buffer,&w,&h,cstr);
cout>github.com/onatbas/png\u load\u test.git我解决了它!谢谢大家的帮助。
毕竟,这不是代码问题。这是配置问题。我的cmake脚本在尝试将PNG和BMP复制到目标文件夹时会损坏它们。代码很好。除非调用的函数实际失败,否则不要打印错误消息。例如,lodepng\u decode32\u文件
或stbi\u从\u文件加载\u
返回什么?哦,我假设您尝试加载的文件是一个实际的PNG图像,可以从其他程序加载?它们确实返回错误值。例如,lodepng返回28,代表“损坏的PNG头”它正在检查png头,我逐字节跟踪它。1 1 1 0 0 1。看起来是这样。第5、6、7字节是错误的。但是对于每个png???stb_图像也是一个错误值。你也可以说,因为尺寸仍然是0 0。缓冲区是空的,当将其加载到opengl texture2d中时,没有加载任何内容,所有内容都是黑色的。一个d对于BMP(我尝试使用SDL2)我得到了这个>>SDL_错误“SDL错误:文件不是Windows BMP文件”如果这些字节位于图像的开头,那么它肯定不是PNG图像,其标题应该是开始的。不,如果字节是应该的,它只是一个跟踪。第5、第6和第7个字节不匹配。但是就像我说的,对于每个PNG。我也尝试了这些图像库的测试文件。我有一些朋友给我发送了一些PNG,它们是t在他们的电脑中加载,但在我的电脑上加载失败。您是否使用协议(例如行结束翻译)通过网络传输文件?因为如果您查看我在上一条评论中链接到的标题,这些字节就是用来检测此类问题的。您是否查看了十六进制编辑器中的前八个字节?是否可以显示给我们吗?