Описание формата BMP для Window 3.0 (DIB)
Основным отличием файлов нового формата (DIB) - Device
Independent Bitmap (аппаратно-независимый битовый образ) является
то, что в них используется кодировка цветов с одной битовой
плоскостью.
Файлы битовых образов нового формата начинаются со структуры
BITMAPFILEHEADER:
typedef struct tagBITMAPFILEHEADER { word
bfType; // тип файла (для битового образа - BM) dword bfSize; //
размер файла в dword word bfReserved1; // не используется
word bfReserved2; // не используется dword bfOffbits;
//смещение данных битового образа от заголовка в байтах }
Непосредственно за ней располагается структура BITMAPINFO,
содержащая всю информацию о битовом образе. Она делится на две
части: структуру BITMAPINFOHEADER, описывающей размеры и цветовой
формат битового образа, и массив структур RGBQUAD, определяющей
цветовую палитру:
typedef struct tagBITMAPINFO { BITMAPINFOHEADER
bmiHeader; RGBQUAD bmiColors[1]; }
typedef struct tagBITMAPINFOHEADER { dword
biSize; //число байт, занимаемых структурой BITMAPINFOHEADER
dword biWidth; //ширина битового образа в пикселах dword
biHeight; //высота битового образа в пикселах word biPlanes;
//число битовых плоскостей устройства word biBitCount; //число
битов на пиксель dword biCompression; //тип сжатия dword
biSizeImage; //размер картинки в байтах dword
biXPelsPerMeter;//горизонтальное разрешение устройства, пиксел/м
dword biYPelPerMeter; //вертикальное разрешение устройства,
пиксел/м dword biClrUsed; //число используемых цветов dword
biClrImportant; //число "важных" цветов } BITMAPINFOHEADER;
Более подробно о структуре BITMAPINFOHEADER:
biSize - обычно используется для облегчения доступа к
таблице цветов.
biPlanes - определяет число битовых плоскостей; однако,
поскольку цвет кодируется последовательными битами, это число
всегда равно 1.
biBitCount - этим полем определяется число цветов,
используемых битовым образом. В зависимости от способа
кодирования, может принимать значения:
1 - битовый образ монохромный, и таблица цветов должна содер-
жать два элемента. Каждый бит в массиве данных кодирует один
пиксел. Если значение бита - 0, то пиксел становится первым
цветом таблицы; если - 1, пиксел становится вторым цветом
таблицы. 4 - битовый образ имеет максимум 16 цветов, и массив
bmiColors (таблица цветов) имеет до 16 элементов. Цвет каждого
пиксела оп- ределяется по таблице цветов при помощи
четырехбитного индекса. Например, если первый байт данных имеет
значение 3Ah, то при отображении битового образа цвет первого
пиксела определяет четвертый элемент таблицы цветов, а цвет
второго - одиннадцатый. 8 - битовый образ имеет максимум 256
цветов, и таблица цветов имеет до 256 элементов. Каждый байт
массива данных определяет цвет одного пиксела. 24 - битовый
образ имеет максимум 2 в 24-й степени цветов. Таблица цветов
пуста, а цвет пикселов определяется пакетами из трех байтов,
описывающими цветовые интенсивности красного, зеле- ного и
голубого цветов.
biCompression - тип сжатия. Может принимать значения:
BI_RGB - сжатие отсутствует; BI_RLE8 - сжатие для формата 8 бит на
пиксел; BI_RLE4 - сжатие для формата 4 бита на пиксел.
biXPelsPerMeter и biYPelsPerMeter - могут использоваться
для выбора из списка ресурсов пиктограммы, наиболее подходящей для
данного устройства.
biClrUsed - число цветов, используемых данныи битовым
образом. Если 0, то используются все цвета палитры (указанные в
массиве bmiColors).
biClrImportant - используется для управления алгоритмом
отображения цветов. Так, если четыре различных приложения
отображают на экране по одному битовому образу с 75 цветами
каждый, то адаптер, выводящий 256 цветов одновременно, не сможет
полностью аутентично отобразить на экране все 4 картинки. В этом
случае используется механизм замены цветов - ищется битовый образ
с наименьшим приоритетом и его "лишние" цвета заменяются наиболее
подходящими.
typedef struct tagRGBQUAD { byte rgbRed;
//интенсивность красного byte rgbGreen; //интенсивность зеленого
byte rgbBlue; //интенсивность голубого byte rgbRserved; //не
используется } RGBQUAD; После того, как все параметры
битового образа определены, в файле идут сами скан-строки битовой
плоскости, причем первой скан-строкой в формате DIB считается нижняя
скан-строка (т.е. начало координат находится в левом нижнем углу
изображения). Скан-строки выровнены по 32-битной границе -
dword !!!
Вернуться к списку
графических форматов
 |