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 回答