【问题标题】:Convert image buffer to pdf with ImageMagick in C++在 C++ 中使用 ImageMagick 将图像缓冲区转换为 pdf
【发布时间】:2010-03-12 22:06:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ pdf-generation imagemagick


    【解决方案1】:

    假设你正在使用 Magick++ Magick::Image 有一个构造函数可以从内存中的 blob 创建一个图像和一个 write() 方法可以将 PDF(和一堆其他格式)写入内存斑点也是如此。

    请注意,在我的 Linux 机器上,ImageMagick 似乎在运行期间创建了一些临时文件。我不确定它是否满足您的要求,但它可能是可配置的。

    你或许可以从这段代码 sn-p 中得到一个好主意:

    #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 会导致麻烦,除非您将输出流切换到二进制模式。上面的代码只是一个简短的示例,所以我忽略了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      相关资源
      最近更新 更多