如何从Magick ++中的char缓冲区或字符串构造Image

时间:2014-09-29 09:59:32

标签: imagemagick graphicsmagick magick++

我需要在Magick ++中从Imagechar *构建一个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_)重新加载。但是,在我的选择中,这种方式实际上是不必要的。

1 个答案:

答案 0 :(得分:2)

关键问题是数据类型对话。我们无法直接将char *转换为Blob。我在GraphicsMagick的源代码中找到了一些演示。它们提供以下方式:

  1. stringchar * => unsigned char *
  2. unsigned char * => const void *
  3. const void * => Blob
  4. 然后Image构造没问题。或者你可以尝试

    Magick::Blob blob(static_cast<const void *>(image.c_str()), len)