В файлах BMP информация о цвете каждого пикселя кодируется 1, 4, 8,
16 или 24 бит (бит/пиксель). Числом бит/пиксель, называемым также глубиной
представления цвета, определяется максимальное число цветов в изображении.
Изображение при глубине 1 бит/пиксель может иметь всего два цвета, а при
глубине 24 бит/пиксель - более 16 млн. различных цветов.
Структура файла BMP |
---|
Заголовок файла растровой графики (14 байт)
Сигнатура файла BMP (2 байт) Размер файла (4 байт) Не используется (2 байт) Не используется (2 байт) Местонахождение данных растрового массива (4 байт) |
Информационный заголовок растрового массива
(40 байт)
Длина этого заголовка (4 байт) Ширина изображения (4 байт) Высота изображения (4 байт) Число цветовых плоскостей (2 байт) Бит/пиксель (2 байт) Метод сжатия (4 байт) Длина растрового массива (4 байт) Горизонтальное разрешение (4 байт) Вертикальное разрешение (4 байт) Число цветов изображения (4 байт) Число основных цветов (4 байт) |
Таблица цветов (длина изменяется от 8 до 1024 байт) |
Собственно данные растрового массива (длина переменная) |
На приведенной схеме показана структура типичного BMP-файла, содержащего 256-цветное изображение (с глубиной 8 бит/пиксель). Файл разбит на четыре основные раздела: заголовок файла растровой графики, информационный заголовок растрового массива, таблица цветов и собственно данные растрового массива. Заголовок файла растровой графики содержит информацию о файле, в том числе адрес, с которого начинается область данных растрового массива. В информационном заголовке растрового массива содержатся сведения об изображении, хранящемся в файле, например, его высоте и ширине в пикселях. В таблице цветов представлены значения основных цветов RGB (красный, зеленый, синий) для используемых в изображении цветов. Программы, считывающие и отображающие BMP-файлы, в случае использования видеоадаптеров, которые не позволяют отображать более 256 цветов, для точной цветопередачи могут программно устанавливать такие значения RGB в цветовых палитрах адаптеров.
Формат собственно данных растрового массива в файле BMP зависит от числа бит, используемых для кодирования данных о цвете каждого пикселя. При 256-цветном изображении каждый пиксель в той части файла, где содержатся собственно данные растрового массива, описывается одним байтом (8 бит). Это описание пикселя не представляет значений цветов RGB, а служит указателем для входа в таблицу цветов файла. Таким образом, если в качестве первого значения цвета RGB в таблице цветов файла BMP хранится R/G/B=255/0/0, то значению пикселя 0 в растровом массиве будет поставлен в соответствие ярко-красный цвет. Значения пикселей хранятся в порядке их расположения слева направо, начиная (как правило) с нижней строки изображения. Таким образом, в 256-цветном BMP-файле первый байт данных растрового массива представляет собой индекс для цвета пикселя, находящегося в нижнем левом углу изображения; второй байт представляет индекс для цвета соседнего справа пикселя и т. д. Если число байт в каждой строке нечетно, то к каждой строке добавляется дополнительный байт, чтобы выровнять данные растрового массива по 16-бит границам.
Не все файлы BMP имеют структуру, подобную показанной на схеме. Например,
файлы BMP с глубиной 16 и 24 бит/пиксель не имеют таблиц цветов; в этих
файлах значения пикселей растрового массива непосредственно характеризуют
значения цветов RGB. Также могут различаться внутренние форматы хранения
отдельных разделов файла. Например, информация растрового массива в некоторых
16 и 256-цветных BMP-файлах может сжиматься посредством алгоритма RLE,
который заменяет последовательности идентичных пикселей изображения на
лексемы, определяющие число пикселей в последовательности и их цвет. В
Windows допускается работа с BMP-файлами стиля OS/2, в которых используются
различные форматы информационного заголовка растрового массива и таблицы
цветов.