我已经下载了ImageMagick的dll,我想知道是否有人知道一些示例代码来完成一项简单的任务:
我用C ++生成了一个图像,并且缓冲区为RGB格式。我需要在通过TCP套接字发送之前将其转换为PDF格式(无需写入文件)。
这对ImageMagick(或任何其他库)是否可行?
答案 0 :(得分:3)
假设你正在使用Magick ++ Magick::Image
有一个构造函数,可以从内存blob和write()方法创建一个图像,可以将PDF(和一堆其他格式)写入一个in -memoy blob以及。
请注意,在我的Linux机器上,ImageMagick似乎在操作期间创建了一些临时文件。我不确定是否符合您的要求,但可能是可配置的。
你可以从这段代码片段中得到一个好主意:
#include <iostream>
#include <Magick++.h>
using namespace std;
using namespace Magick;
static char imageData[] = {
/* ... */
};
int main(int argc, char** argv)
{
/* Initialize the library */
InitializeMagick(*argv);
/* Instantiate an image from RGB data */
Image image(4, // Width
14, // Height
"RGB", // Color components ordering
CharPixel, // Components storage type
imageData);// Image data
/* Write pdf in memory */
Blob b;
image.write(&b, string("pdf"));
/* write pdf data to cout */
/* it should be easy to send it over a socket instead */
cout.write(static_cast<const char*>(b.data()), b.length());
return 0;
}
编辑:我应该补充一点,除非您将输出流切换到二进制模式,否则在Windows上将二进制数据写入cout
会导致麻烦。上面的代码只是一个简短的示例,所以我忽略了它。