Проблемы с BITMAPFILEHEADER - PullRequest
       29

Проблемы с BITMAPFILEHEADER

0 голосов
/ 08 апреля 2011

Я только начал узнавать больше о формате файла .bmp и написал небольшую программу на C ++.

Вот выдержка из моего кода:

FILE* imageFile;
fopen_s (&imageFile, this->GetImagePath (), "rb");

fread (&this->bmfh, sizeof(BITMAPFILEHEADER), 1, imageFile);    
std::cout << bmfh.bfSize << " " << bmfh.bfOffBits << " " << std::endl;

Согласно MSDN bmfh.bfSize должен возвращать размер файла растрового изображения.

Но в моем случае bmfh.bfOffBits (54) больше, чем bmfh.bfSize (14)?Что может быть причиной?Потому что моя идея заключалась в том, чтобы выделить память для данных изображения следующим образом:

this->size = bmfh.bfSize - bmfh.bfOffBits;
pixelData = new BYTE[this->size];

1 Ответ

1 голос
/ 08 апреля 2011

bmfh.bfOffBits (54) - это размер от начала файла до фактических данных RGB файла bmp. Обычно это равно 54.

То есть от смещения 0 (от начала файла) до смещения 53 является заголовок файла bmp. Таким образом, начиная со смещения 54 и далее действительные данные пикселей RGB файла изображения.

bmfh.bfSize (14) - фактический размер изображения.

Я пытаюсь поискать в этом вопросе, и это лучший источник, который я нашел.

http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html

...