Чтение заголовков BMP, упаковано. Чтение неверных значений - PullRequest
0 голосов
/ 12 октября 2011

Я недавно создал программу для чтения заголовка файла и заголовка информации из файла BMP. Я упаковал их, как показано на рисунке, обработал их и напечатал ширину и высоту. К сожалению, ширина и высота выглядят неверно. Я не уверен почему. Возможно, немного / немного порядковый номер? Если так, то я не знаю, как это исправить. Я собираю и запускаю его на GCC.

#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);

1 Ответ

1 голос
/ 12 октября 2011

Файл растрового изображения Windows действительно хранится с прямым порядком байтов.Таким образом, вам нужно будет инвертировать порядковый номер каждого 2 или 4-байтового значения int после загрузки, предполагая, что ваша система имеет старшее значение.Эта статья IBM описывает различные способы сделать это.

...