0
我最近製作了一個程序來讀取BMP文件的fileheader和infoheader。我如圖所示包裝它們,並將其打印出來並打印寬度和高度。不幸的是,寬度和高度出現不正確。我不知道爲什麼。也許有點/小端問題?如果是這樣,我不知道如何解決它。我正在GCC上編譯和運行它。閱讀BMP頭文件,打包。讀取不正確的值
#pragma pack(1)
typedef struct
{
unsigned char fileMarker1; /* 'B' */
unsigned char fileMarker2; /* 'M' */
unsigned int bfSize;
unsigned short unused1;
unsigned short unused2;
unsigned int imageDataOffset; /* Offset to the start of image data */
}FILEHEADER;
typedef struct
{
unsigned int biSize;
signed int width; /* Width of the image */
signed int height; /* Height of the image */
unsigned short planes;
unsigned short bitPix;
unsigned int biCompression;
unsigned int biSizeImage;
int biXPelsPerMeter;
int biYPelsPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
}INFOHEADER;
#pragma pack()
.....
fread(&header, sizeof(FILEHEADER), 1, image);
.....
fread(&iheader, sizeof(INFOHEADER), 1, image);
.....
printf("Width: %i\n", iheader.width);
printf("Height: %i\n", iheader.height);
什麼是圖像的實際尺寸,以及您得到的是什麼值。看看他們在十六進制,看看它是否是一個endianess問題 – James
是你的系統大endian?你的系統是什麼? –
是否在讀取圖像數據前先移動到圖像數據的開頭?數據的偏移量在FILEHEADER中指定。 fileMarker1和fileMarker2的值是否正確? – sashang