我有一个类似的矢量
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 :(得分:1)
我为您自定义了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 :(得分:0)
Zaffy是对的::
在这种情况下不能使用32位整数,因为指向红色,蓝色或绿色像素的sizeof像素包指针是16位。
因此,我们需要使用stdint库中的16位无符号整数
#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);