У меня есть вектор что-то в этом роде
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 ++;
Я настроил пример из 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
, Попробуйте, и вы увидите.
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);