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

Формат BMP — растровый формат изображений

BMP (Bitmap, расширение .bmp) — формат хранения растровых цифровых изображений, разработанный компанией Microsoft для операционной системы Windows. Один из старейших и наиболее простых форматов хранения графики: файл содержит заголовок с описанием параметров изображения и массив пикселей, обычно без сжатия или со сжатием RLE. Широко используется в Windows-приложениях, встроенных системах и там, где важна простота обработки, а не компактность файла.

История

Формат BMP появился в 1980-х годах как часть графического подсистемы Windows. Первоначально он был описан в документации Microsoft как Device-Independent Bitmap (DIB) — «независимый от устройства растровый формат», что подчёркивало: файл должен одинаково отображаться на разных мониторах и принтерах. В ранних версиях Windows (2.0, 3.0) BMP использовался для хранения иконок, курсоров, фоновых изображений и графики оконного интерфейса.

С развитием Windows 95/98 и NT формат получил расширенные возможности: поддержку глубины цвета до 32 бит на пиксель, альфа-канала и различных схем сжатия. Спецификация BMP включена в документацию Windows SDK и остаётся открытой и свободно реализуемой.

Устройство файла

Файл BMP состоит из нескольких последовательных блоков:

  • Заголовок файла (BITMAPFILEHEADER) — 14 байт. Содержит сигнатуру «BM», общий размер файла и смещение до начала массива пикселей.
  • Заголовок изображения (BITMAPINFOHEADER) — как минимум 40 байт. Описывает ширину и высоту изображения в пикселях, число плоскостей, глубину цвета (bits per pixel), тип сжатия, размер изображения в байтах, разрешение в пикселях на метр, число используемых и важных цветов.
  • Палитра (Color Table) — необязательный блок. Присутствует для форматов с индексированными цветами (1, 4, 8 бит на пиксель) и содержит массив структур RGBQUAD.
  • Данные пикселей — массив байтов, обычно расположенный снизу вверх (первая строка файла — нижняя строка изображения). Каждая строка выравнивается по границе 4 байт.

Глубина цвета и режимы

BMP поддерживает несколько режимов глубины цвета:

ГлубинаОписание
1 битМонохромное изображение, палитра из 2 цветов
4 бита16 цветов из палитры
8 бит256 цветов из палитры
16 бит65 536 цветов (5-6-5 без палитры)
24 битаTrue Color: 8 бит на каждый канал RGB
32 битаRGB + 8 бит альфа-канала (прозрачность)

Сжатие

Формат поддерживает несколько типов сжатия, указываемых в заголовке:

  • BI_RGB (0) — без сжатия, основной режим.
  • BI_RLE8 и BI_RLE4 — сжатие RLE (Run-Length Encoding) для изображений с палитрой (8 и 4 бита соответственно). Поддерживается только для индексированных форматов.
  • BI_BITFIELDS (3) — без сжатия, но с масками битовых полей для 16- и 32-битных форматов.
  • BI_JPEG и BI_PNG (4, 5) — внутри BMP может храниться сжатое JPEG или PNG-изображение. Режим поддерживается начиная с Windows 98/2000, но встречается редко.

Достоинства и недостатки

Основное достоинство BMP — простота: файл легко разобрать программно без сторонних библиотек, а отсутствие сжатия (или сжатие без потерь) гарантирует точное воспроизведение каждого пикселя. Это делает формат удобным для обмена изображениями между программами, хранения текстур в играх и встраиваемых системах, где важна скорость декодирования.

Главный недостаток — большой размер файлов. Не сжатое 24-битное изображение 1920×1080 занимает около 6 МБ, в то время как тот же кадр в JPEG или PNG — на порядок меньше. Поэтому в интернете и для хранения фотографий BMP практически не используется, уступив место более эффективным форматам.

Применение

BMP активно применяется в Windows-приложениях: как промежуточный формат при работе с графикой, для хранения иконок и ресурсов, в программах обработки изображений (Paint, GIMP, Photoshop поддерживают чтение и запись BMP). В игровой индустрии BMP иногда используется для хранения текстур, поскольку не требует декомпрессии при загрузке. Формат поддерживается практически всеми графическими библиотеками и языками программирования (Python с Pillow, Java с BufferedImage, C# с System.Drawing).

Связанные форматы

Разновидностью BMP является формат DIB (Device-Independent Bitmap), который отличается отсутствием 14-байтового файлового заголовка — начинается сразу с BITMAPINFOHEADER. DIB используется внутри других форматов, например, в ICO и CLIPBRD. Формат RLE — вариант BMP со сжатием RLE. Формат OS/2 BMP — ранняя версия, разработанная совместно с IBM для OS/2, с более коротким заголовком (12 байт) и ограниченными возможностями.

Источники:

  • Microsoft Docs. BMP File Format / Windows GDI Bitmap Formats.
  • Hunt R. The BMP File Format. Part I. Dr. Dobb's Journal, 1993.
  • Kay D.C., Levine J.R. Graphics File Formats. Windcrest/McGraw-Hill, 1995.
  • Russ J.C. The Image Processing Handbook. CRC Press.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru