我有一个包含RLE压缩的8位RGB TGA图像数据的缓冲区。我想这个加载到一个Magick ++图像,但我不断收到Magick ++ not loading TGA blob
Magick: no decode delegate for this image format `' @ error/blob.c/BlobToImage/353
这里是我的代码
#include <Magick++.h>
#include <fstream>
int main(int argc, char** argv)
{
std::ifstream file("window_borders.tga", std::ios::binary | std::ios::ate);
std::streamsize size = file.tellg();
file.seekg(0, std::ios::beg);
char* buffer = new char[size];
if (!file.read(buffer, size)) return 1;
Magick::Blob data_blob(buffer, size);
Magick::Image m_image(data_blob);
return 0;
}
如果我确定我得到它
window_borders.tga TGA 330x390 330x390+0+0 8-bit sRGB 33106B 0.000u 0:00.000
烦人,如果我指定这信息,那么它工作得很好。我甚至可以把它转换:
Magick::Image m_image(data_blob, Magick::Geometry("330x390"), "TGA");
m_image.magick("JPEG");
m_image.write("test.jpg");
事实上test.jpg
和window_borders.tga
看起来相同。为什么不能自动检测格式?
除非我们用调试器跟踪代码,并明白为什么image_blob格式错误,否则很难分辨出来。 – AlexanderVX
看到我上面的编辑。我有三重检查,我正在提供正确的数据到blob构造函数,不知何故blob的有效性会根据其他未知因素而变化。 – Max
现在'Magick :: Image m_image();'缺少'data_blob'参数? – AlexanderVX