1

サイズ、深さ、パレットなどが既知のビットマップ画像を含むメモリ内の配列があります。この配列を使用して画像の 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>

私は何を間違っていますか?ドキュメントのどの部分に注目する必要がありますか? それはかなり圧倒的です。

4

1 に答える 1

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);
于 2013-01-22T02:36:49.637 に答える