Растрове зображення Windows (.bmp)

Microsoft Стандарт

Bitmap Image File (BMP): це базовий незалежний від пристрою формат растрової графіки від Microsoft, який зберігає нестиснені рядки розгортки або рядки, стиснуті за допомогою RLE, із прямою сумісністю з апаратним буфером кадру.

Конвертувати з BMP у PNG

Безкоштовний конвертер з BMP у PNG у браузері. Миттєво конвертуйте файли на своєму пристрої.

Аналіз та метадані

Операційні системи та аналізатори файлів ідентифікують файли BMP, перевіряючи початкову послідовність бінарних байтів:

Виберіть або перетягніть файли сюди

Приватно - файли ніколи не залишають ваш пристрій

або вставте Ctrl+V
Гарантія конфіденційності без передавання даних мережею: Жодного байта не передано на зовнішні сервери. Уся обробка відбувалася локально в ізольованому середовищі браузера.

Сигнатура заголовка на байтовому рівні (Magic Bytes)

Операційні системи та аналізатори файлів ідентифікують файли BMP, перевіряючи початкову послідовність бінарних байтів:

ШІСТНАДЦЯТКОВА СИГНАТУРА (ЗСУВ 0):

42 4D

ПОДАННЯ В ASCII: BM

Стандартизація: Microsoft Windows Device-Independent Bitmap (DIB) Architecture

Технічні характеристики

Архітектура контейнераBITMAPFILEHEADER, за яким ідуть BITMAPINFOHEADER (DIB) та растровий масив пікселів
СтисненняНестиснені рядки зображення або додаткове RLE-кодування довжини серій BI_RLE8 / BI_RLE4
Порядок байтів (Endianness)Порядок байтів від молодшого до старшого (Little-Endian; порядок байтів Intel x86)
Колірні просториRGB, залежний від пристрою, sRGB (вбудований у BITMAPV5HEADER)
Канали та структура1-бітне монохромне, 4-бітне / 8-бітне з палітрою, 16-бітне, 24-бітне RGB або 32-бітне RGBA
Максимальні розміри2 147 483 647 x 2 147 483 647 пікселів (знакове 32-бітне ціле число)
ПрозорістьПідтримується 32-бітна альфа-маска BGRA в сучасних форматах BITMAPV3HEADER та V5HEADER
Потокове та прогресивне завантаженняНе підтримує потокове передавання; рядки розгортки зберігаються догори дном (знизу вгору), якщо висота не від'ємна

Технічна матриця порівняння: BMP проти конкурентів

Технічний атрибутBMP (Поточний)PNGTIFFJPG
Режим стисненняНезжатий / Мінімальний RLEБез втрат Deflate (менший на ~70%)Незжатий / LZW / ZipЗ втратами DCT (~на 90% менше)
Швидкість декодуванняМиттєве копіювання пам'ятіВимагає декомпресії DeflateВимагає декомпресії LZW/ZIPВимагає обчислення IDCT
Порядок рядків розгорткиЗнизу вгору (інвертований)Зверху внизЗверху вниз / смугиБлоки MCU зверху вниз
Придатність для вебДуже погана (надмірний обсяг файлів)Чудово підходить для графікиПогана (настільні видавничі системи)Чудово підходить для фотографій

Типові режими пошкодження та посібник з відновлення в шістнадцятковому форматі

Зображення відображається скошеним по діагоналі або під кутом.

Першопричина: Неправильний розрахунок доповнення рядка (невдале доповнення кожного рядка розгортки до 4-байтової межі).

Відновлення: Перекодуйте за допомогою конвертера зображень File2File.app для забезпечення правильного 32-бітного кроку рядка розгортки.

Аналіз безпеки та векторів атак на парсери

У декодерах BMP часто трапляється читання за межами буфера під час виділення пам’яті за неперевіреними розмірами заголовка DIB.

Відомі вектори атак

  • Переповнення цілого числа під час обчислення width * height * bpp призводить до виділення замалої області динамічної пам’яті та запису за межі буфера.
  • Пошкоджені послідовності виходу довжини серій RLE8/RLE4, що викликають запис у пам'ять за межами виділеного буфера.
  • Відмова в обслуговуванні за допомогою виділення багатогігабайтної пам'яті, викликаної спеціально створеними розмірами заголовка.

Рекомендації щодо захисту: Перед виділенням пам’яті для вихідного зображення ретельно перевіряйте граничні значення ширини, висоти й бітової глибини із заголовка DIB.

Історичне походження та віхи

1998Windows 98 представляє BITMAPV5HEADER, додаючи керування колірними профілями ICC та корекцію гами.
1990Windows 3.0 стандартизує специфікацію DIB BITMAPINFOHEADER у всій операційній системі.
1987Представлено разом із Windows 2.0 та OS/2 1.1 як власний растровий формат відображення.

Основні переваги

  • Нульове погіршення від стиснення: 100% точне збереження пікселів на рівні бітів без артефактів стиснення.
  • BMP має вбудований кодек у Windows, а підтримка в інших операційних системах і програмах різниться.
  • Надзвичайно простий алгоритм декодування робить його ідеальним для вбудованих мікроконтролерів і навчання програмуванню графіки.

Технічні обмеження та недоліки

  • Величезний розмір файлів через відсутність сучасного ентропійного стиснення на кшталт DEFLATE або кодування Хаффмана.
  • Неефективність для передавання через веб або розповсюдження в мобільних мережах.
  • Порядок рядків розгортки знизу вгору вимагає вертикального перевертання рядків у сучасних конвеєрах графіки зверху вниз.

Цікаві технічні факти

  • BMP за замовчуванням зберігає рядки розгортки зображення догори дном (знизу вгору) через математичну декартову систему координат, яка використовувалася в OS/2.
  • Якщо значення висоти в заголовку BMP встановлено від'ємним, зображення декодується нормально (зверху вниз).
  • Кожен рядок розгортки у файлі BMP повинен бути доповнений нулями до кратності 4 байтам (вирівнювання за 32-бітною межею).

Поширені технічні запитання

Чому файли BMP такі великі?

Файли BMP зберігають необроблені, незжаті значення кольорів для кожного окремого пікселя, тоді як такі формати, як PNG, стискають ці дані без втрати якості.

Чи може BMP підтримувати прозорість?

Так. 32-бітні файли BMP (з використанням BITMAPV3HEADER або новіших) можуть зберігати 8-бітний альфа-канал, хоча підтримка відрізняється в старому програмному забезпеченні.

Як я можу зменшити розмір файлу BMP?

Перетворення BMP на PNG може зменшити розмір файлу, зберігши значення пікселів, але результат залежить від вмісту зображення та кодування BMP.