40 01 00 00_се Ое 00 00_d8 0e 00 00_00 00 00 00_00 00 00 00
ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff ffffff 00 00
cOcOcO cOcOcO cOcOcO cOcOcO cOcOcO cOcOcO cOcOcO cOcOcO cOcOcO cOcOcO 00 00
Первые три строки составляют заголовок, после которого следует закодированное изображение. Заголовок изображения описывается структурами BITMAPFILEHEADER (первая строка) и BITMAPINFOHEADER (вторая и третья строки). Ниже показано, как заполняются поля этих структур данными из файла Tstl0_3.bmp:
typedef struct tagBITMAPFILEHEADER
{
WORD bfType; //В это поле всегда записываются значения 42 4D (коды букв ВМ). //Это признак ВМР-файла.
DWORD bfSize; //Размер файла. Значение 76 01 00 00 формирует десятичное 374.
Работа с растровыми изображениями
WORD bfReservedl; //0000 первое резервное поле - всегда ноль. WORD bfReserved2; //0000 второе резервное поле - тоже ноль. DWORD bfOffBits; // 36 00 00 00. это десятичное 54. // Смещение от начала файла до первого байта графических данных. } BITMAPFILEHEADER
Рассмотренная структура хранится только на диске и не загружается в оперативную память при создании объекта Bitmap. Но структура, соответствующая второй строчке, может при работе с изображением храниться в оперативной памяти. Из 54 байт заголовка первая структура потребовала 14 байт, следовательно, размер структуры BITMAPINFOHEADER составляет 40 байт. Именно это число и хранится в поле biSize:
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize: //00000028 - десятичное 40. размер BITMAPINFOHEADER в байтах.
LONG biWidth : //0000000A - ширина картинки в пикселах.
LONG bi Height ; //0000000A - высота картинки в пикселах.
WORD biPlanes: //0001 .- количество битовых плоскостей.
WORD biBitCount //0018 - 24 бита на пиксел (3 байта).
DWORD biCompression: //00000000 - способ сжатия (0 - данные не сжимаются).
DWORD biSizelmage: //00000140 - десятичное 320.
//размер изображения в байтах (без заголовков).
LONG biXPelsPerMeter: //OECE поля, определяющие количество