使用C ++中的ImageMagick将图像缓冲区转换为pdf

时间:2010-03-12 22:06:10

标签: c++ pdf-generation imagemagick

我已经下载了ImageMagick的dll,我想知道是否有人知道一些示例代码来完成一项简单的任务:

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

这对ImageMagick(或任何其他库)是否可行?

1 个答案:

答案 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会导致麻烦。上面的代码只是一个简短的示例,所以我忽略了它。