Формат файла BMP

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

или перетащите их сюда · изображения, видео, аудио и документы · до 2 ГБ

Что такое BMP?

BMP — родной растровый формат Windows, появившийся в 1987 году. Файл состоит из короткого заголовка и следом сырых значений пикселей, строка за строкой, в обычном случае вообще без сжатия. Фотография 1920×1080 в 24-битном цвете занимает около 6 МБ независимо от того, детализированный это пейзаж или сплошной белый прямоугольник: заметить, что второй случай состоит из повторов, формату нечем.

Две особенности регулярно ставят людей в тупик. Строки хранятся снизу вверх, поэтому наивный читатель, полагающий порядок сверху вниз, получает изображение, перевёрнутое по вертикали. И каждая строка дополняется до кратности четырём байтам, поэтому 24-битная картинка шириной в 3 пикселя занимает 12 байт на строку вместо 9. И то и другое — следствие того, что формат проектировали под способ, которым Windows переносила растры в видеопамять.

Именно эта простота и не даёт BMP исчезнуть. Чтобы прочитать такой файл, хватает пары десятков строк кода без всякой библиотеки, что удобно встраиваемым системам, тестовым стендам, конвейерам скриншотов и промежуточным шагам между инструментами. Как формат доставки он не имеет смысла вовсе: PNG хранит те же самые пиксели без потерь и в разы компактнее.

Расширение.bmp
КатегорияИзображение
MIME-типimage/bmp
Год появления1987
РазработчикMicrosoft
СжатиеНет (без сжатия)
ПрозрачностьДа
АнимацияНет
Рекламный блок — включите рекламу в public/ads.js · landing-article

BMP: частые вопросы

Почему файлы BMP такие большие?
Потому что обычно они несжаты: каждый пиксель записывается буквально, и размер прямо следует из ширины, умноженной на высоту и на число байт на пиксель. Конвертация в PNG даёт побайтово те же пиксели при размере обычно в четыре-десять раз меньше и вообще без ущерба качеству.
BMP работает без потерь?
Да. Стандартный BMP хранит сырые значения пикселей без всякого приближения, поэтому ничего не отбрасывается. Он без потерь ровно в том же смысле, что и PNG, только без сжатия — поэтому конвертация BMP в PNG является чистым выигрышем, а в JPEG нет.
Поддерживает ли BMP прозрачность?
У 32-битного BMP есть четвёртый байт на пиксель, способный работать альфа-каналом, но поддержка неровная: многие просмотрщики его игнорируют и рисуют изображение непрозрачным. Если прозрачность важна, берите PNG, где альфа входит в спецификацию и учитывается повсеместно.
Почему мой BMP перевёрнут?
Потому что BMP хранит строки снизу вверх, в отличие почти от всех остальных форматов. Читатель, полагающий порядок сверху вниз, выдаёт зеркальную по вертикали картинку. Заголовок может объявить отрицательную высоту как признак прямого порядка — одни программы так и пишут, другие это неверно разбирают.
Когда BMP всё ещё уместен?
Когда файл должен читаться минимумом кода и без библиотек: встраиваемые устройства, простые тестовые обвязки, промежуточный шаг между двумя инструментами, которые оба его понимают. Для хранения, обмена и веба нет ни одного случая, где BMP выигрывает у PNG или JPEG.
Теряется ли качество при конвертации BMP в PNG?
Нет. Сжатие PNG работает без потерь, поэтому каждый пиксель сохраняется в точности и меняется только размер файла. Позже можно конвертировать обратно в BMP и получить идентичное изображение — поэтому PNG строго лучший способ хранить те же данные.

Конвертировать из BMP

Конвертировать в BMP