我需要在Magick ++中从Image
或char *
构建一个std::string
对象。我已经尝试了ImageMagick和GraphicsMagick,但仍然无法解决它。
我首先创建一个Blob
对象并使用Image(const Blob &blob_)
构造函数来获取Image
。这是演示代码:
//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
我找到了obtain string from Blob的内容。所以我创建了Blob
并通过base64
方法更新了它。但是仍然出现错误。
我能想到的唯一方法是将char缓冲区保存在临时文件中,然后通过Image(const std::string &imageSpec_)
重新加载。但是,在我的选择中,这种方式实际上是不必要的。
答案 0 :(得分:2)
关键问题是数据类型对话。我们无法直接将char *
转换为Blob
。我在GraphicsMagick的源代码中找到了一些演示。它们提供以下方式:
string
或char *
=> unsigned char *
unsigned char *
=> const void *
const void *
=> Blob
然后Image
构造没问题。或者你可以尝试
Magick::Blob blob(static_cast<const void *>(image.c_str()), len)