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

Формат BMP

BMP (от англ. Bitmap Picture — «битовая карта») — это формат хранения растровых графических изображений, разработанный корпорацией Microsoft. BMP является одним из старейших и наиболее простых форматов, предназначенных для хранения цифровых изображений в виде двумерного массива пикселей (точек), каждый из которых имеет собственное значение цвета. Формат широко использовался в операционных системах семейства Windows и поддерживается практически всеми программами для работы с графикой, однако из-за отсутствия эффективного сжатия (в большинстве вариантов) уступил место более современным форматам, таким как JPEG, PNG и GIF.

История

Формат BMP был представлен компанией Microsoft в 1990 году вместе с выходом операционной системы Windows 3.0. Первоначально он предназначался для хранения иконок, курсоров и фоновых изображений в среде Windows. Впоследствии BMP стал стандартным форматом для обмена растровыми изображениями между приложениями в экосистеме Microsoft.

В 1990-е годы, в связи с ростом популярности персональных компьютеров и развитием мультимедиа, BMP получил широкое распространение. Однако его главным недостатком был большой размер файлов, так как сжатие данных в формате не предусматривалось (за исключением редких модификаций с использованием алгоритма RLE). С появлением более эффективных форматов сжатия (JPEG в 1992 году, PNG в 1996 году) использование BMP для хранения фотографий и сложных изображений сократилось. Тем не менее, формат остаётся актуальным для хранения несжатых изображений в программных средах, где важна точность цветопередачи, а также в системах, не поддерживающих современные форматы.

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

Файл BMP имеет строгую структуру, состоящую из нескольких последовательных блоков данных. Основные компоненты:

Заголовок файла (File Header)

Занимает первые 14 байт. Содержит:

  • Сигнатуру (2 байта) — всегда 0x42 0x4D (ASCII-коды букв «B» и «M»).
  • Размер файла в байтах (4 байта).
  • Зарезервированные поля (4 байта).
  • Смещение начала данных изображения от начала файла (4 байта).

Заголовок изображения (DIB Header)

Следует за заголовком файла. Существует несколько версий этого блока, наиболее распространённые — BITMAPINFOHEADER (40 байт) и более новые версии (BITMAPV4HEADER, BITMAPV5HEADER). Содержит:

  • Ширину и высоту изображения в пикселях.
  • Количество бит на пиксель (1, 4, 8, 16, 24 или 32).
  • Тип сжатия (обычно 0 — без сжатия, но возможен RLE для 4- и 8-битных изображений).
  • Разрешение изображения в пикселях на метр.
  • Количество используемых цветов (для палитровых изображений).

Палитра (Color Palette)

Присутствует только для изображений с глубиной цвета 1, 4 или 8 бит на пиксель. Представляет собой таблицу, где каждому значению пикселя соответствует определённый цвет, заданный в формате RGB (4 байта на цвет, включая резервный байт). Для 16-, 24- и 32-битных изображений палитра отсутствует — цвет каждого пикселя кодируется непосредственно в его значении.

Данные изображения (Pixel Data)

Массив пикселей, записанных строками снизу вверх (в стандартном BMP). Каждая строка дополняется нулями до размера, кратного 4 байтам. Порядок цветовых компонент в пикселе — BGR (синий, зелёный, красный), а не RGB, что является особенностью формата.

Классификация и разновидности

Формат BMP поддерживает несколько режимов, определяющих глубину цвета и наличие сжатия:

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

  • 1 бит на пиксель — монохромное изображение (чёрно-белое или два произвольных цвета из палитры).
  • 4 бита на пиксель16 цветов, задаваемых палитрой.
  • 8 бит на пиксель — 256 цветов, задаваемых палитрой.
  • 16 бит на пиксель — 65536 цветов, кодируется в формате RGB (обычно 5-5-5 или 5-6-5 бит на каналы).
  • 24 бита на пиксель — 16,7 миллионов цветов (True Color), по 8 бит на каждый из трёх каналов (RGB).
  • 32 бита на пиксель — 16,7 миллионов цветов плюс альфа-канал (прозрачность) — 8 бит на канал.

По сжатию

  • Без сжатия (BI_RGB) — наиболее распространённый вариант, данные пикселей хранятся без потерь.
  • Сжатие RLE (BI_RLE4, BI_RLE8) — используется для изображений с палитрой (4 или 8 бит). Позволяет уменьшить размер файла за счёт кодирования повторяющихся последовательностей пикселей.
  • Сжатие с использованием масок (BI_BITFIELDS) — применяется для 16- и 32-битных изображений, когда битовые маски для цветовых каналов задаются отдельно.

Применение

Несмотря на устаревание для веб- и мобильных приложений, формат BMP продолжает использоваться в ряде областей:

Программная разработка

BMP часто применяется как промежуточный формат для обмена изображениями между программами, особенно в среде Windows. Многие приложения для обработки изображений (например, Microsoft Paint) по умолчанию сохраняют файлы в BMP.

Научная и техническая графика

В системах компьютерного зрения, медицинской визуализации и обработки сигналов BMP используется для хранения несжатых данных, где важна точность каждого пикселя. Отсутствие потерь при сжатии делает его удобным для анализа изображений.

Встраиваемые системы

Из-за простоты структуры BMP легко реализуется в микроконтроллерах и устройствах с ограниченными вычислительными ресурсами. Формат поддерживается многими графическими библиотеками, включая SDL, OpenCV и GDI.

Игровая индустрия

В старых видеоиграх (до середины 2000-х годов) BMP использовался для хранения спрайтов, текстур и фонов. Некоторые современные ретро-проекты также обращаются к этому формату.

Ограничения и критика

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

  • Большой размер файлов — несжатые 24-битные изображения занимают в несколько раз больше места, чем JPEG или PNG при том же качестве.
  • Отсутствие эффективного сжатия — встроенный RLE сжимает только изображения с ограниченной палитрой и даёт слабый выигрыш.
  • Отсутствие поддержки прозрачности — альфа-канал (32 бита) реализован не во всех программах и не всегда корректно отображается.
  • Ограниченная цветовая глубина — для современных задач (HDR, широкий цветовой охват) 24-битный BMP недостаточен.
  • Неэффективность для веба — из-за большого размера BMP плохо подходит для загрузки через интернет.

Из-за этих ограничений формат BMP практически вытеснен из веб-дизайна, цифровой фотографии и мобильных платформ. Однако его простота и отсутствие потерь обеспечивают ему нишевое применение в технических и научных областях.

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

  • Формат BMP является одним из немногих, где строки изображения хранятся в обратном порядке (снизу вверх). Это связано с особенностями вывода графики в ранних версиях Windows.
  • Сигнатура «BM» в начале файла происходит от слов «Bitmap».
  • В 1990-е годы формат BMP часто использовался для хранения иконок и курсоров в Windows, однако впоследствии для этих целей был разработан специальный формат ICO.
  • Существует модификация BMP, называемая «OS/2 BMP», которая использовалась в операционной системе IBM OS/2. Она отличается структурой заголовков.

Источники

  • Microsoft Corporation. Bitmap Storage (Windows). MSDN Library.
  • Murray, J. D., van Ryper, W. Encyclopedia of Graphics File Formats. 2nd Edition. O'Reilly Media, 1996.
  • ISO/IEC 8632:1992 — Information technology — Computer graphics — Metafile for the storage and transfer of picture description information (частично описывает структуру BMP).
  • BMP file formatспецификация формата на сайте Microsoft.

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

На главную BFOmetr →