4

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

4

3 回答 3

5

你试过了吗 :

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

于 2013-06-14T12:34:09.347 回答
1

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

于 2013-06-14T12:40:41.460 回答
1

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

Magick::Image img("Sample.bmp");
Magick::Blob blob; 
img.magick( "JPEG" )
img.write( &blob );
std::string myStr = myBlob.base64();
于 2013-06-14T13:06:37.767 回答