Что такое файл BMP?
Файлы с расширением .BMP представляют файлы растровых изображений, которые используются для хранения растровых цифровых изображений. Эти изображения не зависят от графического адаптера и также называются форматом файла независимого от устройства растрового изображения (DIB). Эта независимость служит цели открытия файла на нескольких платформах, таких как Microsoft Windows и Mac. Формат файла BMP может хранить данные в виде двумерных цифровых изображений как в монохромном, так и в цветном формате с различной глубиной цвета.
Спецификации формата файла BMP
Независимые от устройств растровые изображения помогают обмениваться растровыми изображениями между устройствами и приложениями. Из-за постоянного развития этого формата файла информация, содержащаяся в заголовках, может различаться в зависимости от версии Bitmap. Один файл растрового изображения состоит из фиксированных, а также структур переменного размера в определенной последовательности.
Структуры в файле Bitmap располагаются в следующем порядке:
Структура | Необязательно | Размер | Назначение |
---|---|---|---|
Заголовок файла | Нет | 14 | Для хранения общей информации о файле растрового изображения |
Заголовок DIB | Нет | Фиксированный размер | Для хранения подробной информации о растровом изображении и определения формата пикселей |
Дополнительные битовые маски | Да | 12 или 16 байт | Для определения формата пикселей |
Цветовая палитра | Полудополнительно | Переменный размер | Для определения цветов, используемых данными растрового изображения |
Gap1 | Да | Размер переменной | Выравнивание структуры |
Массив пикселей | Нет | Переменный размер | Формат пикселей определяется заголовком DIB или дополнительными битовыми масками. |
Gap2 | Да | Переменный размер | Выравнивание структуры |
Цветовой профиль ICC | Да | Размер переменной | Для определения цветового профиля для управления цветом |
Когда растровое изображение загружается в память, оно становится структурой DIB, используемой Windows через GDI API. Заголовок файла не является частью этой структуры данных. Цвет также может состоять из 16-битных записей, которые представляют собой индексы к текущей палитре, на которую ссылаются, вместо явных определений цвета RGB. Давайте посмотрим на некоторые из них подробно, особенно на заголовки.
Заголовок растрового файла
Заголовок растрового файла похож на другие заголовки файлов, используемые для идентификации файла. Поскольку существуют разные варианты формата файла BMP, первые 2 байта формата файла BMP представляют собой символ «B», а затем символ «M» в кодировке ASCII. Все целочисленные значения хранятся в формате с прямым порядком байтов.
Смещение шестнадцатеричное | Смещение dec | Размер | Назначение |
---|---|---|---|
00 | 0 | 2 байта | Поле заголовка, используемое для идентификации файла BMP и DIB, имеет значение 0x42 0x4D в шестнадцатеричном формате, такое же, как BM в ASCII. Возможны следующие значения.* BM — Windows 3.1x, 95, NT, … и т. д. * BA — массив растровых изображений структуры OS/2 * CI — структура OS/2 цветной значок * CP – указатель цвета OS/2 const * IC – значок структуры OS/2 * PT – указатель OS/2 |
02 | 2 | 4 байта | Размер файла BMP в байтах |
06 | 6 | 2 байта | Зарезервировано; фактическое значение зависит от приложения, которое создает образ |
08 | 8 | 2 байта | Зарезервировано; фактическое значение зависит от приложения, которое создает образ |
0A | 10 | 4 байта | Смещение, т. е. начальный адрес байта, в котором можно найти данные растрового изображения (массив пикселей). |
Заголовок DIB (заголовок растровой информации)
Подробная информация об изображении представлена этим заголовком. На основе этой информации будет определено приложение, которое будет использоваться для вывода изображения на экран. Все такие заголовки содержат поле DWORD (32-битное) с указанием их размера, чтобы приложение могло легко определить заголовок, используемый в изображении. В основном это связано с тем, что формат DIB претерпел несколько расширений. Ниже приведен заголовок DIB с перечисленными полями.
Цветовая палитра
Цветовая палитра BMP представляет собой массив структур, определяющих значения интенсивности RGB для каждого цвета в цветовой палитре устройства отображения. Каждый пиксель в растровых данных хранит одно значение, используемое в качестве индекса в цветовой палитре. Информация о цвете, хранящаяся в элементе с этим индексом, определяет цвет этого пикселя. Доступность цвета в файле растрового изображения различается следующим образом:
- Один, 4 и 8-битный — ожидается, что он всегда будет содержать цветовую палитру
- Шестнадцать, 24 и 32-битные — никогда не содержат цветовые палитры
- Шестнадцати- и 32-битные файлы BMP - содержат значения маски битовых полей вместо цветовой палитры
Хранилище пикселей
Пиксели растрового изображения хранятся в виде битов, упакованных в строки, где размер каждой строки округляется до кратного 4 байтам (32-битное DWORD) путем заполнения. Общее количество байтов, необходимых для хранения пикселей изображения, нельзя рассчитать напрямую, просто подсчитав биты. Поскольку задействовано заполнение, требуется эффект округления размера каждой строки до кратного 4 байтам. Байты заполнения (не обязательно 0) должны быть добавлены в конец строк, чтобы увеличить длину строк до числа, кратного четырем байтам. Когда массив пикселей загружается в память, каждая строка должна начинаться с адреса памяти, кратного 4.
Изображение на самом деле описывается 32-битным представлением DWORD массива пикселей. Обычно пиксели хранятся «снизу вверх», начиная с левого нижнего угла, двигаясь слева направо, а затем построчно снизу вверх изображения. Форматы пикселей и их значение перечислены ниже:
- Формат 1 бит на пиксель (1bpp) поддерживает 2 различных цвета (например, черный и белый).
- Формат 2 бита на пиксель (2bpp) поддерживает 4 различных цвета и хранит 4 пикселя на 1 байт, причем крайний левый пиксель занимает два старших бита. Каждое значение пикселя представляет собой 2-битный индекс в таблице до 4 цветов.
- Формат 4 бита на пиксель (4bpp) поддерживает 16 различных цветов и хранит 2 пикселя на 1 байт, при этом крайний левый пиксель находится в более значимом полубайте. Каждое значение пикселя представляет собой 4-битный индекс в таблице до 16 цветов.
- Формат 8 бит на пиксель (8bpp) поддерживает 256 различных цветов и сохраняет 1 пиксель на 1 байт. Каждый байт является индексом в таблице до 256 цветов.
- Формат 16 бит на пиксель (16 бит на пиксель) поддерживает 65536 различных цветов и сохраняет 1 пиксель на 2-байтовое СЛОВО. Каждое СЛОВО может определять альфа-, красный, зеленый и синий образцы пикселя.
- Формат 24-битных пикселей (24bpp) поддерживает 16 777 216 различных цветов и сохраняет значение 1 пикселя на 3 байта. Каждое значение пикселя определяет образцы красного, зеленого и синего пикселя (8.8.8.0.0 в нотации RGBAX). Конкретно в порядке: синий, зеленый и красный (по 8 бит на каждый отсчет).
- Формат 32 бита на пиксель (32 бита на пиксель) поддерживает 4 294 967 296 различных цветов и сохраняет 1 пиксель на 4-байтовое DWORD. Каждое DWORD может определять альфа-, красный, зеленый и синий образцы пикселя.