我发现自己正在编写一个简单的程序来从 bmp 文件中提取数据。我刚开始,我正处于 WTF 时刻之一。
当我运行程序并提供此图像时:http ://www.hack4fun.org/h4f/sites/default/files/bindump/lena.bmp
我得到输出:
type: 19778
size: 12
res1: 0
res2: 54
offset: 2621440
实际图像大小为 786,486 字节。为什么我的代码报告 12 个字节?
http://en.wikipedia.org/wiki/BMP_file_format中指定的标题格式 与我的 BMP_FILE_HEADER 结构相匹配。那么为什么它会充满错误的信息呢?
图像文件似乎没有损坏,并且其他图像给出同样错误的输出。我错过了什么?
#include <stdio.h>
#include <stdlib.h>
typedef struct {
unsigned short type;
unsigned int size;
unsigned short res1;
unsigned short res2;
unsigned int offset;
} BMP_FILE_HEADER;
int main (int args, char ** argv) {
char *file_name = argv[1];
FILE *fp = fopen(file_name, "rb");
BMP_FILE_HEADER file_header;
fread(&file_header, sizeof(BMP_FILE_HEADER), 1, fp);
if (file_header.type != 'MB') {
printf("ERROR: not a .bmp");
return 1;
}
printf("type: %i\nsize: %i\nres1: %i\nres2: %i\noffset: %i\n", file_header.type, file_header.size, file_header.res1, file_header.res2, file_header.offset);
fclose(fp);
return 0;
}