我在内存中有一个包含位图图像的数组,具有已知的大小,深度,调色板等。我想使用这个数组创建一个图像的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>
我做错了什么?我应该关注哪些文档?这是非常压倒性的。
答案 0 :(得分: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);