2010-03-12 2 views
0

Я скачал DLL файлы для ImageMagick и мне интересно, если кто-нибудь знает какой-то пример кода, чтобы выполнить простую задачу:Преобразовать буфер изображения в PDF с ImageMagick в C++

Я создал образ в C++ и имеют буфер в формате RGB. Мне нужно преобразовать его в формат PDF (без записи в файл), прежде чем отправлять его через сокет TCP.

Возможно ли это с помощью ImageMagick (или любой другой библиотеки)?

ответ

3

Предполагая, что вы используете Magick ++ Magick::Image, есть конструктор, который может создавать изображение из блочной памяти и метода write(), который может записывать PDF (и кучу других форматов) в блокнот в виде memo также.

Обратите внимание, что на моей машине 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; 
} 

Edit: я, вероятно, следует добавить, что запись двоичных данных в cout на Windows, вызовет проблемы, если не переключить выходной поток в двоичную Режим. Вышеприведенный код - это всего лишь короткий образец, поэтому я проигнорировал это.

Смежные вопросы