Преобразование буфера изображения в PDF с ImageMagick в C ++ - PullRequest
0 голосов
/ 13 марта 2010

Я скачал dll для ImageMagick и мне интересно, кто-нибудь знает какой-нибудь пример кода для выполнения простой задачи:

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

Это возможно с ImageMagick (или любой другой библиотекой)?

1 Ответ

3 голосов
/ 18 марта 2010

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

Обратите внимание, что на моем компьютере с 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 вызовет проблемы, если вы не переключите выходной поток в двоичный режим. Приведенный выше код является лишь кратким примером, поэтому я проигнорировал это.

...