【问题标题】:how to get buffer from Imagemagick image in c++如何在 C++ 中从 Imagemagick 图像中获取缓冲区
【发布时间】:2013-06-11 02:26:55
【问题描述】:

我正在使用 ImageMagick 库进行图像处理。我需要加载“bmp”图像,将其转换为 jpeg,将其加载到缓冲区中并通过网络发送。

但是,我在 ImageMagick 中找不到任何可以转换和存储缓冲区数据的支持函数。我只能写入文件。尝试使用Magick::Blob,但仍然没有用。

以下代码用于加载、转换和写入文件:

Magick::Image img("Sample.bmp");
img.magick("jpeg");
img.write("Output.jpeg");

编辑:

将 Magick::Blob 用作:

Magick::Blob myBlob;
img.write(&myBlob);
const void *myData = myBlob.data();

但是在这里我无法将 myData 转换为 const char* 缓冲区而没有任何损失。

【问题讨论】:

  • 你用Blob做了什么没用?
  • 为什么要转换成const char*?它是您要通过网络发送的缓冲区。不管是void * 还是char *。你只需要一个指向缓冲区开头的指针,以及这个缓冲区的大小。

标签: c++ image image-processing imagemagick


【解决方案1】:

你试过了吗:

Magick::Image img("Sample.bmp");

Blob blob; 
img.magick("JPEG");
img.write(&blob);

// Then access blob's data with  blob.data()
sendJpegImage(blob.data(), blob.length());

void sendJpegImage(void* data, size_t length) 是您的数据发送函数。

【讨论】:

    【解决方案2】:

    非常感谢您的回答。 我现有的套接字连接在两端都接受字符串流。这就是我需要const char* 的原因。 在返回字符串的Magick::Blob 中找到转换函数base64()。 这解决了我的问题。供参考,最终代码变为:

    Magick::Image img("Sample.bmp");
    Magick::Blob blob; 
    img.magick( "JPEG" )
    img.write( &blob );
    std::string myStr = myBlob.base64();
    

    【讨论】:

    • 太糟糕了,您没有解释最后需要一个字符串。你的问题是store data in buffer 不是store data in character stream...
    【解决方案3】:

    documentation 建议Use to_blob to write to a String。是你做的吗?如果是这样,那是怎么失败的?

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 2020-03-30
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 2014-04-28
      • 1970-01-01
      • 2013-02-19
      相关资源
      最近更新 更多