使用Magick ++创建一个新图像

时间:2013-05-30 12:02:45

标签: c++ c image imagemagick 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 个答案:

答案 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);