2010-03-12 72 views
0

我已经下载了DLL对ImageMagick的,我想知道是否有人的一些示例代码知道完成一个简单的任务:转换图像缓冲区与ImageMagick的PDF在C++

我在C生成的图像++,并有RGB格式的缓冲区。在通过TCP套接字发送之前,我需要将其转换为PDF格式(无需写入文件)。

这是可以与ImageMagick(或任何其他库)吗?

回答

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; 
} 

编辑:我也许应该补充的是二进制数据写入cout在Windows上会引起麻烦,除非你的输出流转换为二进制模式。上面的代码只是一个简短的例子,所以我忽略了这一点。

相关问题