BMP

Формат BMP — структура и применение растровых файлов Windows

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

Расширения.bmp (.dib)
MIMEimage/bmp
СпецификацияДокументация Microsoft (официального международного стандарта нет)
СжатиеОбычно без сжатия (опционально RLE)
ПрозрачностьОграниченная (альфа определяется в 32-битных заголовках V4 и V5)
АнимацияНет
Глубина цвета1, 4, 8, 16, 24, 32 бита на пиксель

BMP — формат для сохранения в файл аппаратно-независимого растра (DIB), использовавшегося в Microsoft Windows и OS/2. Это не спецификация международной организации по стандартизации: фактически её роль играет документация Microsoft для разработчиков. Главная особенность — простая структура, благодаря которой любая программа легко читает и записывает такие файлы.

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

Согласно статье «Bitmap Storage» на Microsoft Learn, файл BMP состоит из следующих частей в таком порядке.

ПорядокЭлементСодержимое
1BITMAPFILEHEADERИдентификатор файла (BM), размер файла, смещение начала пиксельных данных
2BITMAPINFOHEADER (или заголовок V4/V5)Ширина и высота в пикселях, число бит на пиксель, способ сжатия, разрешение
3Таблица цветов (массив RGBQUAD)Используется в 1-, 4- и 8-битных изображениях с палитрой
4Массив пикселейСобственно данные изображения

Первые два байта файла — ASCII BM (в шестнадцатеричном виде 42 4D), поэтому даже файл с изменённым расширением можно опознать как BMP по этой сигнатуре. В информационном заголовке есть и поле для разрешения печати (пикселей на метр).

Хранение снизу вверх

Обычный BMP хранит пиксели от нижней строки к верхней (bottom-up). Если значение высоты в заголовке отрицательное, строки хранятся сверху вниз (top-down). Кроме того, в конец каждой строки добавляются байты выравнивания, чтобы число байтов в строке было кратно 4. Это частый источник ошибок при написании собственного парсера BMP.

Пример расчёта размера строки

Строка BMP должна быть выровнена по 4 байта. Если 24-битное изображение шириной 101 пиксель, фактические данные строки занимают 101 × 3 = 303 байта, но добавляется 1 байт выравнивания до кратного 4, и строка хранится как 304 байта. Поэтому общий размер пиксельных данных равен (байтов в строке) × высота в пикселях, а если прибавить заголовок (обычно 54 байта), получится размер файла. Из-за этого правила при ручной работе с изображениями, ширина которых не кратна 4, часто возникает ошибка, когда каждая строка съезжает.

Почему файлы большие

BMP в большинстве случаев хранит сырые пиксели без сжатия. У 24-битного BMP на пиксель приходится 3 байта, поэтому изображение 1920×1080 занимает около 6,2 МБ, а снимок смартфона 4032×3024 — около 36,6 МБ. Для палитровых изображений до 8 бит можно выбрать сжатие RLE (кодирование длин серий), но на фото оно почти не действует. MDN тоже советует избегать BMP в веб-контенте из-за размера.

Прозрачность

У традиционного 24-битного BMP нет альфа-канала. 32-битный BMP с заголовком V4 или V5 может задать альфа-маску, но многие программы не интерпретируют её как прозрачность, поэтому для обмена прозрачными изображениями надёжнее PNG.

Когда BMP используют сегодня

  • Старое промышленное оборудование, встраиваемые устройства, чековые принтеры и некоторые корпоративные программы принимают только BMP
  • Простые программы и учебные примеры, где нужно работать с пикселями напрямую, без сжатия и распаковки
  • Способ хранения небольших изображений внутри иконок Windows (ICO)

На что обратить внимание при конвертации

  • BMP → PNG: без потерь, а размер значительно уменьшается. Лучшая конвертация для хранения и обмена.
  • BMP → JPG: для фото размер уменьшается в десятки раз, но применяется сжатие с потерями.
  • Другие форматы → BMP: проверьте, какую разрядность требует устройство (24 или 8 бит). Прозрачные области заливаются цветом фона. Сохранить в BMP можно в инструменте конвертации изображений.

Актуально на: 2026-09-23

Источники

← К справочнику форматов