如何在c ++中从Imagemagick图像中获取缓冲区

时间:2013-06-14 12:25:52

标签: c++ image image-processing imagemagick

我正在使用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*缓冲区而没有任何损失。

3 个答案:

答案 0 :(得分:4)

你有没有尝试过:

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)是您的数据发送功能。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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