【发布时间】:2010-03-12 22:06:09
【问题描述】:
我已经下载了 ImageMagick 的 dll,想知道是否有人知道一些示例代码来完成一个简单的任务:
我已经用 C++ 生成了一个图像,并且有 RGB 格式的缓冲区。在通过 TCP 套接字发送之前,我需要将其转换为 PDF 格式(不写入文件)。
这对 ImageMagick(或任何其他库)是否可行?
【问题讨论】:
标签: c++ pdf-generation imagemagick
我已经下载了 ImageMagick 的 dll,想知道是否有人知道一些示例代码来完成一个简单的任务:
我已经用 C++ 生成了一个图像,并且有 RGB 格式的缓冲区。在通过 TCP 套接字发送之前,我需要将其转换为 PDF 格式(不写入文件)。
这对 ImageMagick(或任何其他库)是否可行?
【问题讨论】:
标签: c++ pdf-generation imagemagick
假设你正在使用 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 会导致麻烦,除非您将输出流切换到二进制模式。上面的代码只是一个简短的示例,所以我忽略了它。
【讨论】: