Открыть сервис

BMP

BMP — это формат файлов растровых изображений, разработанный корпорацией Microsoft. BMP (от англ. Bitmap Picture) является стандартным форматом для хранения цифровых изображений в операционных системах Windows и OS/2. Отличительной особенностью формата является хранение данных в несжатом или слабо сжатом виде (с использованием алгоритма RLE — Run-Length Encoding), что обеспечивает высокую скорость доступа к пикселям, но приводит к большому размеру файлов по сравнению с современными форматами с потерями (JPEG) или эффективным сжатием без потерь (PNG). Формат поддерживает различные цветовые глубины и цветовые модели, включая индексированные палитры и полноцветные изображения.

История

Формат BMP был впервые представлен вместе с операционной системой Windows 1.0 в 1985 году. Его создание было обусловлено необходимостью иметь простой и универсальный способ хранения растровой графики, не зависящий от аппаратного обеспечения конкретных видеокарт. В отличие от конкурирующих форматов того времени, таких как PCX или TIFF, BMP был тесно интегрирован с графическим интерфейсом Windows (GDI), что упрощало программирование для разработчиков.

В 1989 году была выпущена вторая версия формата для OS/2 1.2, которая ввела поддержку 24-битного цвета. В 1993 году, с выходом Windows NT 3.1, появилась версия BMP с поддержкой 32-битного цвета (с альфа-каналом), хотя последний долгое время не поддерживался многими приложениями. Последующие версии Windows (95, 98, 2000, XP) не вносили кардинальных изменений в структуру формата, однако добавляли поддержку новых цветовых пространств (например, sRGB) и метаданных. Несмотря на появление более эффективных форматов (JPEG, PNG, GIF), BMP остаётся стандартным форматом для хранения иконок, курсоров и фоновых изображений в Windows.

Структура файла

Файл BMP состоит из четырёх основных разделов, которые следуют строго друг за другом:

  1. Заголовок файла (BITMAPFILEHEADER): Содержит общую информацию о файле: сигнатуру (два байта «BM»), размер файла в байтах, смещение до начала данных изображения (пиксельного массива). Занимает 14 байт.
  2. Заголовок изображения (BITMAPINFOHEADER): Содержит метаданные об изображении: ширину и высоту в пикселях, количество бит на пиксель (1, 4, 8, 16, 24, 32), метод сжатия (0 — без сжатия, 1 — RLE 8-бит, 2 — RLE 4-бит), разрешение в пикселях на метр, количество цветов в палитре. Существует несколько версий этого заголовка (BITMAPV4HEADER, BITMAPV5HEADER), отличающихся размером и набором полей (например, поддержка альфа-канала и цветовых профилей). Размер заголовка обычно составляет 40 байт, но может быть больше (до 124 байт в версии 5).
  3. Палитра (Color Table): Опциональный раздел, присутствует только для изображений с глубиной цвета 8 бит и менее (256 цветов). Представляет собой массив структур RGBQUAD (по 4 байта на цвет: синий, зелёный, красный, резервный). Палитра определяет, какой цвет соответствует каждому значению индекса пикселя.
  4. Данные изображения (Pixel Array): Непосредственно массив пикселей. Данные хранятся построчно, начиная с нижней строки изображения (в отличие от большинства других форматов, где строки идут сверху вниз). Каждая строка дополняется нулевыми байтами до размера, кратного 4 байтам (выравнивание по границе DWORD). Для 24-битных изображений каждый пиксель кодируется тремя байтами (синий, зелёный, красный). Для 32-битных — четырьмя (синий, зелёный, красный, альфа-канал). Для 8-битных — одним байтом-индексом в палитре.

Классификация и виды

BMP не имеет множества формальных подтипов, но различается по нескольким ключевым параметрам:

По глубине цвета

  • Монохромный (1 бит на пиксель): Изображение состоит из двух цветов (обычно чёрного и белого). Используется для чертежей, штрих-кодов.
  • Индексированный (4 или 8 бит на пиксель): Изображение использует палитру из 16 или 256 цветов. Эффективен для хранения диаграмм, логотипов, иконок.
  • High Color (16 бит на пиксель): Кодирует цвет с использованием 5 или 6 бит на каждый канал. Обеспечивает до 65 536 цветов, но с заметными цветовыми переходами.
  • True Color (24 бита на пиксель): Каждый из трёх каналов (R, G, B) кодируется 8 битами, что даёт 16,7 миллиона цветов. Наиболее распространённый вариант для фотографий и сложной графики.
  • True Color с альфа-каналом (32 бита на пиксель): Добавляет четвёртый канал (альфа) для хранения информации о прозрачности. Поддерживается в версиях BMP 4 и 5.

По сжатию

  • Без сжатия (BI_RGB): Данные хранятся в сыром виде. Самый простой и быстрый для чтения/записи, но и самый большой по размеру.
  • Сжатие RLE (BI_RLE8, BI_RLE4): Используется только для 8-битных и 4-битных изображений. Алгоритм сжатия без потерь, эффективный для изображений с большими однотонными областями. Неэффективен для фотографий.
  • Сжатие с помощью битовых полей (BI_BITFIELDS): Используется для 16- и 32-битных изображений. Позволяет задавать маски для каждого цветового канала, что даёт гибкость в распределении битов (например, 5-6-5 для 16 бит).
  • Сжатие JPEG/PNG (BI_JPEG, BI_PNG): В редких случаях BMP может содержать сжатые данные в формате JPEG или PNG. Эта возможность не является стандартной и редко поддерживается.

Применение

Несмотря на появление более эффективных форматов, BMP сохраняет определённые ниши применения:

  • Операционная система Windows: Формат является «родным» для GDI. Он используется для хранения иконок (файлы .ico), курсоров (.cur), фоновых изображений рабочего стола, скриншотов (создаваемых по нажатию клавиши Print Screen).
  • Программное обеспечение: Многие графические редакторы (например, Microsoft Paint, Adobe Photoshop) поддерживают BMP как один из стандартных форматов для сохранения и обмена данными. В некоторых научных и инженерных приложениях (например, для обработки медицинских снимков или геопространственных данных) используется несжатый BMP из-за его простоты и предсказуемости.
  • Встраиваемые системы: Благодаря простоте декодирования BMP часто используется в микроконтроллерах и устройствах с ограниченными вычислительными ресурсами (например, для отображения изображений на дисплеях).
  • Образовательные цели: Формат удобен для изучения основ растровой графики, работы с пикселями и алгоритмов сжатия.

Критика

Основные недостатки формата BMP:

  • Большой размер файла: Несжатый BMP занимает значительно больше места на диске, чем JPEG (с потерями) или PNG (сжатие без потерь). Например, фотография размером 1920×1080 пикселей в 24-битном BMP весит около 6 МБ, в то время как в JPEG — 1–2 МБ, а в PNG — 2–4 МБ.
  • Отсутствие эффективного сжатия: RLE-сжатие, доступное для индексированных изображений, неэффективно для фотографий. Встроенное сжатие JPEG/PNG не является стандартом и не поддерживается большинством программ.
  • Ограниченная поддержка метаданных: В отличие от TIFF или PNG, BMP не поддерживает хранение сложных метаданных (например, EXIF, IPTC) без сторонних расширений.
  • Отсутствие поддержки прозрачности в старых версиях: Альфа-канал появился только в версии 4 (Windows NT 3.1) и не поддерживается многими старыми приложениями.

Интересные факты

  • Формат BMP является одним из немногих, где данные изображения хранятся «снизу вверх» (от нижней строки к верхней). Это связано с особенностями работы ранних видеокарт и графических библиотек.
  • Существует версия BMP для OS/2, которая отличается от Windows-версии размером заголовка и порядком байтов.
  • Несмотря на то, что BMP считается «устаревшим» форматом, он до сих пор является стандартом для хранения иконок в Windows. Файлы .ico и .cur по сути являются контейнерами, которые могут содержать несколько изображений BMP разного размера и глубины цвета.
  • В 1990-х годах существовали программы, которые «сжимали» BMP, перекодируя его в формат JPEG, но сохраняя расширение .bmp. Это приводило к путанице и ошибкам при открытии.

Источники

  • Microsoft Corporation. «Bitmap Storage». MSDN Library.
  • ISO/IEC 10918-1 (JPEG) и ISO/IEC 15948 (PNG) — стандарты, используемые для сравнения.
  • «Graphics File Formats: Reference and Guide» by David C. Kay and John R. Levine.
  • «The BMP File Format» by Murray R. (2000).
  • Спецификация формата BMP из документации Windows SDK.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →