2013-05-30 25 views
0

我有這種矢量東西的新形象創建使用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 ++這個載體的新形象;

回答

0

Zaffy是正確::

32位整數不能在這種情況下爲的sizeof pixelpacket指針爲紅色,藍色或綠色像素被用來爲16位。

因此,我們需要在我們初始化WORD R,G,B,而不是結構RGBS從stdint庫

#include<stdint.h> 
typedef uint16_t WORD; 

使用16位無符號整數現在。

初始化斑點的方法是:一滴一滴(像素數據的地址,數據的大小) 因此,代碼將是這樣的:

Blob blob(&rgbt[0],(rgbt.size()*sizeof(rgbt[0])); 
Image image; 
image.size("100x100"); 
image.magick("RGB"); 
image.read(blob); 
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。試試看,你會看到。

+0

扔「Magick的一個實例後終止叫:: ErrorCorruptImage' 什麼():Magick:意外的文件結尾'':沒有這樣的文件或目錄@ error/rgb.c/ReadRGBImage/229 Aborted(core dumped) – user2369146