0

我有一个这样的矢量

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 ++从该向量中形成新图像的有效方法是什么?

4

2 回答 2

1

我从Magick++ API文档中为您定制了一个示例。

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

但我不确定您是否应该使用 1 个字节unsigned char而不是 4 个字节int。试一试,你会看到的。

于 2013-05-30T12:12:35.753 回答
0

扎菲是对的::

在这种情况下不能使用 32 位整数,因为指向红色、蓝色或绿色像素的像素包指针大小为 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);
于 2013-06-03T11:05:50.810 回答