Я пытаюсь создать новый файл растрового изображения, используя C. Это структура заголовка файла .bmp.
#define uint16 unsigned short
#define uint32 unsigned long
#define uint8 unsigned char
typedef struct
{
uint16 magic; //specifies the file type "BM" 0x424d
uint32 bfSize; //specifies the size in bytes of the bitmap file
uint16 bfReserved1; //reserved; must be 0
uint16 bfReserved2; //reserved; must be 0
uint32 bOffBits;
} BITMAPFILEHEADER;
В моей программе я делаю это.
main() {
FILE* fp;
fp = fopen("test.bmp", "wb");
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
bmfh.magic = 0x4d42; // "BM" magic word
bmfh.bfSize = 70;
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
bmfh.bOffBits = 54;
fwrite(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fclose(fp);
}
Итак, когда я читаю мой файл test.bmp, он должен содержать 14 байтов (размер структуры) и значения должны быть
42 4d 46 00 00 00 00 00 00 00 36 00 00 00
Но если я читаю файл, он показывает мне 16 байтов:
42 4d 04 08 46 00 00 00 00 00 00 00 36 00 00 00
Откуда это «04 08»?Мой bmp-файл поврежден.
Мой вопрос заключается в том, что при вводе-выводе двоичного файла, если я записываю структуру в файл, а его размер не кратен 4 байтам (32 бита), он автоматически меняет структуру?
Есть идеи, как обойти это?