我發現自己正在編寫一個簡單的程序來從bmp文件中提取數據。我剛剛開始,我正處於WTF時刻之一。c從BMP獲取數據
當我運行該程序,並提供該圖片:http://www.hack4fun.org/h4f/sites/default/files/bindump/lena.bmp
我得到的輸出:
type: 19778
size: 12
res1: 0
res2: 54
offset: 2621440
實際的圖像大小爲786486個字節。爲什麼我的代碼報告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;
}
請確保您的BMP_FILE_HEADER是打包的,即sizeof(BMP_FILE_HEADER)== 14 – Musa
@Musa這是16.謝謝,現在我有一些事情要繼續。 –