私は自分がbmpファイルからデータを抽出するための簡単なプログラムを書いていることに気づきました。私は始めたばかりで、それらのWTFの瞬間の1つにいます。
プログラムを実行してこの画像を提供すると、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;
}