2012-12-03 40 views
1

我有一個內存中的數組,包含一個位圖圖像,具有已知的大小,深度,調色板等。我想使用這個數組來創建圖像的GraphicsMagick表示,以使我能夠使用它的BMP頭文件來編寫這個文件,並且可以用其他軟件查看它。到目前爲止,我有類似的東西(只是重要的一行 - 如果需要,我可以添加整個程序)。首先,變量:如何使用GraphicsMagick在存儲器流中創建位圖的BMP標頭?

FILE *fp_out; 
ExceptionInfo exception; 
Image *image; 
ImageInfo *image_info; 
char buffer[BUFFER_SIZE] = {0}; 
const int w = WIDTH, h = HEIGHT; 

及相關代碼:

image = ConstituteImage(w, h, "RGB", CharPixel, buffer, &exception); 
image_info = CloneImageInfo((ImageInfo *) NULL); 
fp_out = fopen("image.bmp", "wb"); 
image_info->file = fp_out; 
WriteImage(image_info, image); 

image.bmp文件被創建,但BMP頭是不存在與第一字節該位圖包含像這樣:

id=ImageMagick version=1.0 
class=DirectClass matte=False 
columns=74 rows=75 depth=8 
<binary data of my image> 

我在做什麼錯?我應該關注哪些文檔?這是非常令人難以置信的。

回答

1

使用的輸出格式是默認的MIFF格式。爲了解決這個問題,你可以做

image = ConstituteImage(w, h, "RGB", CharPixel, buffer, &exception); 
image_info = CloneImageInfo((ImageInfo *) NULL); 
fp_out = fopen("image.bmp", "wb"); 
image_info->file = fp_out; 
strcpy(image_info->magick,"BMP"); 
WriteImage(image_info, image); 

或做(更通常的方式)

image = ConstituteImage(w, h, "RGB", CharPixel, buffer, &exception); 
image_info = CloneImageInfo((ImageInfo *) NULL); 
strcpy(image->filename,"image.bmp"); 
WriteImage(image_info, image); 
相關問題