Создайте новое изображение с помощью Magick ++

У меня есть вектор что-то в этом роде

typedef struct
{
int r,g,b;
} __attribute__((__packed__))
rgbs;

vector<rgbs> rgbt;

rgbs rgb;
for(int row=0;row<100; row++)
{
for(int col=0;col<100; col++)
{
rgb.r=col+row;
rgb.g=col+row;
rgb.b=col+row;
rgbt.push_back(rgb);
}
}

Каким будет эффективный способ формирования нового изображения из этого вектора с помощью magick ++;

0

Решение

Я настроил пример из Magick ++ API документация для вас.

Blob blob( &rgbt[0], rgbt.size() / sizeof(rgbt[0]) );
Image image;
image.size( "100x100")
image.magick( "RGB" );
image.read( blob);

Но я не уверен, стоит ли использовать один байт unsigned char вместо 4 байтов int, Попробуйте, и вы увидите.

1

Другие решения

Zaffy был прав ::

В этом случае нельзя использовать 32-битное целое число, поскольку размер указателя пакета пикселей на красный, синий или зеленый пиксель равен 16 битам.

Итак, нам нужно использовать 16-битное целое число без знака из библиотеки stdint

#include<stdint.h>
typedef uint16_t WORD;

Теперь в структуре rgbs вместо этого мы инициализируем WORD r, g, b.

Способ инициализации Blob: Blob blob (адрес пиксельных данных, размер данных)
Итак, код будет примерно таким:

Blob blob(&rgbt[0],(rgbt.size()*sizeof(rgbt[0]));
Image image;
image.size("100x100");
image.magick("RGB");
image.read(blob);
0

По вопросам рекламы [email protected]