0
我已经下载了DLL对ImageMagick的,我想知道是否有人的一些示例代码知道完成一个简单的任务:转换图像缓冲区与ImageMagick的PDF在C++
我在C生成的图像++,并有RGB格式的缓冲区。在通过TCP套接字发送之前,我需要将其转换为PDF格式(无需写入文件)。
这是可以与ImageMagick(或任何其他库)吗?
我已经下载了DLL对ImageMagick的,我想知道是否有人的一些示例代码知道完成一个简单的任务:转换图像缓冲区与ImageMagick的PDF在C++
我在C生成的图像++,并有RGB格式的缓冲区。在通过TCP套接字发送之前,我需要将其转换为PDF格式(无需写入文件)。
这是可以与ImageMagick(或任何其他库)吗?
假设您使用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;
}
编辑:我也许应该补充的是二进制数据写入cout
在Windows上会引起麻烦,除非你的输出流转换为二进制模式。上面的代码只是一个简短的例子,所以我忽略了这一点。