Mysic by: ALOS(JNR)/SPARK
Описание формата ВMР для
Window 3.0 (DIB)
________________________________________
Основным отличием файлов нового формата
(DIB) - Device Independent Bitmap (аппа-
ратно-независимый битовый образ) являет-
ся то, что в них используется кодировка
цветов с одной битовой плоскостью.
файлы битовых образов нового формата
начинаются со структуры
BITMAPFILEHEADER:
typedef struct tag BITMAPFILEHEADER
word bfType: тип файла (для битового образа - BM)
dword bfSize; //размер файла в dword
word bfReserved1: не используется
word bfReserved2: не используется
dword bfOffbits: смещение данных битового образа от заго-
ловка в байтах
Непосредственно
за ней распола-
гается структура
BITMAPINFO , со-
держащая всю ин-
формацию о бито-
вом образе. Она
делится на две
части: структуру
BITMAPINFOHEADER
, описывающей
размеры и цвето-
вой формат бито-
вого образа, и
массив структур
RGBQUAD ,опреде-
ляющей цветовую
палитру:













typedef struct tag BITMAPINFO;
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors [1];
typedef struct tag BITMAPINFOHEADER
dword biSize: число байт , занимаемых структурой
BITMAPIUFOHEADER
dword biWidth: ширина битового образа в пикселах
dword biHeight: высота битового образа в пикселах
word biPlames: число битовых плоскостей устройства
word biBitCovmt: число битов на пиксель
dword biCompressiom: тип сжатия
dword biSizeImage: размер картинки в байтах
dword biXPelsPerMeter: горизонтальное разрешение устройства,
пиксел/м
dword biYPelPerMeter: вертикальное разрешение устройства,
пиксел/м
dword biClrUsed: число используемых цветов
dword biClrImportamt: число "важных" цветов
BITMAPINFOHEADER
Более подробно
biSize - обычно используется для об-
легчения доступа к таблице цветов.
biPlanes - определяет число битовых
плоскостей; однако, поскольку цвет коди-
руется последовательными битами, это
число всегда равно 1.
biBitCount - этим полем определяется
число цветов, используемых битовым обра-
зом. В зависимости от способа кодирова-
ния, может принимать значения:
1 - битовый образ монохромный, и
таблица цветов должна содержать два эле-
мента. Каждый бит в массиве данных коди-
рует один пиксел. Если значение бита -
0 , то пиксел становится первым цветом
таблицы; если - 1, пиксел становится
вторым цветом таблицы.
4 - битовый образ имеет максимум 16
цветов, и массив bmiColors (таблица цве-
тов) имеет до 16 элементов. Цвет каждого
пиксела определяется по таблице цветов
при помощи четырехбитного индекса. Нап-
ример, если первый байт данных имеет
значение ЗAh, то при отображении битово-
го образа цвет первого пиксела определя-
ет четвертый элемент таблицы цветов, а
цвет второго - одиннадцатый.
8 - битовый образ имеет максимум 256
цветов, и таблица цветов имеет до 256
элементов. Каждый байт массива данных
определяет цвет одного пиксела.
24 - битовый образ имеет максимум 2
в 24-й степени цветов. Таблица цветов
пуста, а цвет пикселов определяется па-
кетами из трех байтов, описывающими цве-
товые интенсивности красного, зеленого и
голубого цветов.
biCompression - тип сжатия. Может
принимать значения:
BI_RGB - сжатие отсутствует;
BI_RLE8 - сжатие для формата 8 бит на
пиксел;
BI_RLEЧ - сжатие для формата 4 бита на
пиксел.
biXPelsPerMeter и biYPelsPerMeter -
могут использоваться для выбора из спис-
ка ресурсов пиктограммы, наиболее подхо-
дящей для данного устройства.
biClrUsed - число цветов, используе-
мых данныи битовым образом. Если 0, то
используются все цвета палитры (указан-
ные в массиве bmiColors).
biClrImportant - используется для
управления алгоритмом отображения цве-
тов. Так, если четыре различных приложе-
ния отображают на экране по одному бито-
вому образу с 75 цветами каждый, то
адаптер, выводящий 256 цветов одновре-
менно, не сможет полностью аутентично
отобразить на экране все 4 картинки. В
этом случае используется механизм замены
цветов - ищется битовый образ с наи-
меньшим приоритетом и его "лишние" цвета
заменяются наиболее подходящими.
typedef struct tagRGBQUAD
byte rgbRed: интенсивность красного
byte rgbGreen: интенсивность зеленого
byte rgbBlue: интенсивность голубого
byte rgbRserved: не используется
RGBQUAD
После того, как все параметры бито-
вого образа определены, в файле идут са-
ми скан-строки битовой плоскости, причем
первой скан-строкой в формате DIB счита-
ется нижняя скан-строка (т.е. начало ко-
typedef struct tagRGBQUAD
byte rgbRed: интенсивность красного
byte rgbGreen: интенсивность зеленого
byte rgbBlue: интенсивность голубого
byte rgbRserved: не используется
RGBQUAD
После того, как все параметры бито-
вого образа определены, в файле идут са-
ми скан-строки битовой плоскости, причем
первой скан-строкой в формате DIB счита-
ется нижняя скан-строка (т.е. начало ко-
ординат находится в левом нижнем углу
изображения).
Скан-строки выровнены по 32-битной
границе - dword !!!
________________________________________
Other articles: