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