Создайте новое изображение с помощью 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++;
2 ответа
Решение
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);
Я настроил для вас пример из документации по API Magick ++.
Blob blob( &rgbt[0], rgbt.size() / sizeof(rgbt[0]) );
Image image;
image.size( "100x100")
image.magick( "RGB" );
image.read( blob);
Но я не уверен, стоит ли использовать один байт unsigned char
вместо 4 байтов int
, Попробуйте, и вы увидите.