Формат 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 →


