Imagemagick 如何在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

我需要从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_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是的,那是个打字错误。谢谢,我已经修好了。