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

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();

但是在这里,我无法将我的数据转换为const char*缓冲区而不会丢失任何内容。


你尝试过哪些 Blob 相关的操作却没有成功? - Sander De Dycker
你为什么想要转换成 const char*?这是一个你想要通过网络发送的缓冲区。无论它是 void * 还是 char *,你只需要一个指向缓冲区开头的指针和缓冲区的大小即可。 - Matthieu Rouget
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)


1

文档建议使用to_blob方法将数据写入字符串。您是否这样做了?如果是,它失败了吗?


1
非常感谢您的回答。 我的现有套接字连接在两端都接受字符串流。这就是为什么我需要const char*。 在Magick::Blob中找到了转换函数base64(),它返回字符串。 这解决了我的问题。参考代码如下:
Magick::Image img("Sample.bmp");
Magick::Blob blob; 
img.magick( "JPEG" )
img.write( &blob );
std::string myStr = myBlob.base64();

1
很遗憾你没有解释需要在结尾处使用字符串。你的问题是“将数据存储在缓冲区”而不是“将数据存储在字符流中”... - Matthieu Rouget

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接