Що таке файл BMP?
Файли з розширенням .BMP представляють файли Bitmap Image, які використовуються для зберігання растрових цифрових зображень. Ці зображення не залежать від графічного адаптера, а також називаються форматом файлу растрового зображення, незалежного від пристрою (DIB). Ця незалежність служить для відкриття файлу на кількох платформах, таких як Microsoft Windows і Mac. Формат файлу BMP може зберігати дані як двовимірні цифрові зображення як у монохромному, так і в кольоровому форматі з різною глибиною кольору.
Специфікації формату файлу BMP
Незалежні від пристроїв растрові зображення служать допоміжним засобом для обміну растровими зображеннями між пристроями та програмами. Через постійний розвиток цього формату файлу інформація, що міститься в заголовках, може відрізнятися залежно від версії Bitmap. Один растровий файл складається зі структур фіксованого та змінного розміру в певній послідовності.
Структури у файлі Bitmap розташовані в такому порядку:
Склад | Необов’язковий | Розмір | Призначення |
---|---|---|---|
Заголовок файлу | Ні | 14 | Для збереження загальної інформації про файл растрового зображення |
Заголовок DIB | Ні | Фіксований розмір | Для зберігання детальної інформації про растрове зображення та визначення формату пікселів |
Додаткові бітові маски | Так | 12 або 16 байт | Для визначення формату пікселів |
Палітра кольорів | Напівнеобов’язковий | Змінний розмір | Для визначення кольорів, які використовуються даними растрового зображення |
Gap1 | Так | Змінний розмір | Вирівнювання структури |
Масив пікселів | Ні | Змінний розмір | Формат пікселя визначається заголовком DIB або додатковими бітовими масками. |
Gap2 | Так | Змінний розмір | Вирівнювання структури |
Колірний профіль ICC | Так | Змінний розмір | Щоб визначити колірний профіль для керування кольором |
Коли растрове зображення завантажується в пам’ять, воно стає структурою DIB, яка використовується Windows через API GDI. Заголовок файлу не є частиною цієї структури даних. Колір також може складатися з 16-бітових записів, які становлять індекси палітри, на яку наразі посилаються, замість явних визначень кольорів RGB. Давайте розглянемо деякі з них докладніше, особливо заголовки.
Заголовок растрового файлу
Заголовок растрового файлу подібний до заголовків інших файлів, які використовуються для ідентифікації файлу. Оскільки існують різні варіанти формату файлу BMP, перші 2 байти формату файлу BMP є символом “B”, а потім символом “M” у кодуванні ASCII. Усі цілі значення зберігаються у форматі little-endian.
Шістнадцяткове зміщення | Зменшення зміщення | Розмір | Призначення |
---|---|---|---|
00 | 0 | 2 байти | Поле заголовка, яке використовується для ідентифікації файлу BMP і DIB, має значення 0x42 0x4D у шістнадцятковому форматі, таке ж, як BM у ASCII. Він може мати такі можливі значення.* BM – Windows 3.1x, 95, NT тощо. * BA – масив растрових зображень структури OS/2 * CI – структура OS/2 кольорова піктограма * CP – покажчик кольору OS/2 const * IC – піктограма структури OS/2 * PT – покажчик OS/2 |
02 | 2 | 4 байти | Розмір файлу BMP у байтах |
06 | 6 | 2 байти | Зарезервовано; фактичне значення залежить від програми, яка створює зображення |
08 | 8 | 2 байти | Зарезервовано; фактичне значення залежить від програми, яка створює зображення |
0A | 10 | 4 байти | Зсув, тобто початкова адреса, байта, де можна знайти дані растрового зображення (масив пікселів). |
Заголовок DIB (інформаційний заголовок растрового зображення)
Детальна інформація про зображення представлена цим заголовком. На основі цієї інформації буде визначено програму, яка буде використовуватися для відображення зображення на екрані. Усі такі заголовки містять поле DWORD (32-розрядний), що вказує їхній розмір, щоб програма могла легко визначити заголовок, який використовується в зображенні. В основному це пов’язано з тим, що формат DIB зазнав кількох розширень. Нижче наведено заголовок DIB із переліченими полями.
Палітра кольорів
Палітра кольорів BMP — це масив структур, які визначають значення інтенсивності RGB кожного кольору в палітрі кольорів пристрою відображення. Кожен піксель у растрових даних зберігає одне значення, яке використовується як індекс у палітрі кольорів. Інформація про колір, що зберігається в елементі за цим індексом, визначає колір цього пікселя. Наявність кольору у файлі растрового зображення змінюється таким чином:
- Один, 4 і 8-бітний – очікується, що завжди буде міститися палітра кольорів
- Шістнадцять, 24 і 32-розрядні - ніколи не містять кольорових палітр
- Шістнадцяти та 32-розрядні файли BMP – містять значення маски бітових полів замість палітри кольорів
Pixel Storage
Пікселі растрового зображення зберігаються як біти, упаковані в рядки, де розмір кожного рядка округлюється до кратного 4 байтам (32-розрядний DWORD) шляхом доповнення. Загальний обсяг байтів, необхідний для зберігання пікселів зображення, не можна безпосередньо обчислити, просто підрахувавши біти. Оскільки використовується доповнення, необхідний ефект округлення розміру кожного рядка до кратного 4 байтам. Байти заповнення (не обов’язково 0) повинні бути додані до кінця рядків, щоб збільшити довжину рядків до кратної чотирьом байтам. Коли масив пікселів завантажується в пам’ять, кожен рядок повинен починатися з адреси пам’яті, кратної 4.
Зображення фактично описується 32-бітним представленням DWORD масиву пікселів. Зазвичай пікселі зберігаються «знизу вгору», починаючи з лівого нижнього кута, зліва направо, а потім рядок за рядом від низу до верху зображення. Формати пікселів і їхні наслідки перераховані нижче.
- Формат 1 біт на піксель (1bpp) підтримує 2 різні кольори (наприклад, чорний і білий).
- Формат 2 біта на піксель (2bpp) підтримує 4 різні кольори та зберігає 4 пікселі на 1 байт, крайній лівий піксель знаходиться у двох старших бітах. Значення кожного пікселя є 2-бітним індексом у таблиці до 4 кольорів.
- Формат 4 біти на піксель (4bpp) підтримує 16 різних кольорів і зберігає 2 пікселі на 1 байт, причому крайній лівий піксель знаходиться у більш значущому нібле. Значення кожного пікселя є 4-бітним індексом у таблиці до 16 кольорів.
- Формат 8 біт на піксель (8 біт на піксель) підтримує 256 різних кольорів і зберігає 1 піксель на 1 байт. Кожен байт є індексом у таблиці до 256 кольорів.
- Формат 16 біт на піксель (16 bpp) підтримує 65536 різних кольорів і зберігає 1 піксель на 2-байтове СЛОВО. Кожне СЛОВО може визначати альфа-, червоний, зелений і синій зразки пікселя.
- 24-бітний піксельний формат (24 біт на піксель) підтримує 16 777 216 різних кольорів і зберігає значення 1 пікселя на 3 байти. Кожне значення пікселя визначає червоний, зелений і синій зразки пікселя (8.8.8.0.0 в нотації RGBAX). Зокрема, у порядку: синій, зелений і червоний (8 біт на кожну вибірку).
- Формат 32 біт на піксель (32 біт на піксель) підтримує 4 294 967 296 різних кольорів і зберігає 1 піксель на 4-байтовий DWORD. Кожен DWORD може визначати альфа-, червоний, зелений і синій зразки пікселя.