Imagemagick 如何在Magick+中从字符缓冲区或字符串构造图像+;
我需要从Magick++中的Imagemagick 如何在Magick+中从字符缓冲区或字符串构造图像+;,imagemagick,graphicsmagick,magick++,Imagemagick,Graphicsmagick,Magick++,我需要从Magick++中的char*或std::string构造一个Image对象。我试过ImageMagick和GraphicsMagick,但仍然无法解决 我首先创建一个Blob对象,并使用Image(const-Blob&Blob)构造函数来获得一个图像。下面是演示代码: //image is of type std::string size_t len = image.size(); char *buf = new char[len + 1]; strncpy(buf, image.c
char*
或std::string
构造一个Image
对象。我试过ImageMagick和GraphicsMagick,但仍然无法解决
我首先创建一个Blob
对象,并使用Image(const-Blob&Blob)
构造函数来获得一个图像
。下面是演示代码:
//image is of type std::string
size_t len = image.size();
char *buf = new char[len + 1];
strncpy(buf, image.c_str(), len);
Blob blob(buf, len);
Image pic(blob);
但当我运行它时,我得到了一个错误:
terminate called after throwing an instance of 'Magick::ErrorCoder'
what(): Magick: JPEG datastream contains no image () reported by coders/jpeg.c:344 (JPEGErrorHandler)
Aborted
我找到了一些关于你的东西。因此,我创建了一个Blob
,并通过base64
方法进行更新。但是仍然发生了一个错误
我能想到的唯一方法是将char缓冲区保存在一个临时文件中,并通过
Image(const std::string&imageSpec)
重新加载它。但是,在我的选择中,这种方式确实是不必要的。关键问题是数据类型对话。我们不能直接将char*
转换为Blob
。我在GraphicsMagick的源代码中找到了一些演示。它们提供以下方式:
string
或char*
=>unsigned char*
unsigned char*
=>const void*
const void*
=>Blob
图像
构造就可以了。或者你可以试试看
Magick::Blob blob(static_cast<const void *>(image.c_str()), len)
Magick::Blob Blob(静态_cast(image.c_str()),len)
这太棒了。不过,我相信您的上一句话中有一个输入错误:Magick::Blob Blob(static_cast(image.c_str()),len)
-谢谢@JonathanBasile是的,那是个打字错误。谢谢,我已经修好了。