BMP
BMP (Bitmap) — bitmap-формат або DIB (англ. device independent bitmap) — формат файлу зображень растрової графіки, де зображення зберігається у вигляді двовимірного масиву з пікселів, кожен піксель має власний колір[1]. Запам'ятовує одно- й багатокольорові (RGB) ілюстрації у формі Pixel. Формат почав використовуватися в операційних системах Windows та OS/2, у новіших версіях яких поступившися форматам SVG, JPEG, GIF. Дані цього формату включаються в двійкові файли ресурсів RES і в PE-файли.
Розширення файлу: |
. |
---|---|
MIME-тип: |
image/x-ms-bmp (неофіційно) |
Type code: | 'BMP' |
Узагальнений ідентифікатор типу: | com.microsoft.bmp |
Тип формату: | Графічний формат |
Формат файлу BMP здатний зберігати 2D цифрові зображення довільної ширини, висоти та роздільної здатності, як монохромні так і кольорові, різної глибини кольору, і, необов'язково, зі стисненням даних, альфа-каналом та керуванням кольору. Специфікація Windows Metafile (WMF) охоплює формат файлу BMP. Серед іншого, wingdi.h
визначає BMP-константи та структури. Растрова графіка загалом і Bitmap зокрема залежать від роздільної здатності, так при збільшенні розмірів зображення буде поступово погіршуватися його якість[2].
Можливості формату
У даному форматі можна зберігати тільки одношарові растри. На кожен піксель в різних файлах може приходити різна кількість біт (глибина кольору). Microsoft пропонує бітності 1, 2, 4, 8, 16, 24, 32, 48 і 64. В бітності 8 і нижче він вказується індексом з таблиці кольорів (палітри), а при великих: безпосереднім значенням. Колір же в будь-якому випадку можна задати тільки в колірній моделі RGB, але в бітності 16 і 32 можна отримати відтінки сірого з глибиною до 16 і 32-ох біт відповідно. Часткова прозорість реалізована альфа-каналом різних бітностей, але при цьому прозорість без градацій можна побічно отримати RLE-кодуванням. Растрові зображення є прямокутною сіткою пікселів, сітка має певну кількістю пікселів та інформаційний вміст (глибину кольору) на піксель[3].
У більшості випадків пікселі зберігаються у вигляді відносно простого двовимірного масиву. Для бітності 4 і 8 доступно RLE-кодування, яке може зменшити їх розмір. Формат BMP так само підтримує вбудовування даних у форматах JPEG і PNG. Але останнє скоріше більше призначене не для компактного зберігання, а для обходу обмежень архітектури GDI, яка не передбачає пряму роботу із зображеннями форматів відмінних від BMP.
В останніх версіях формату BMP так само з'явилися можливості управління кольором. Зокрема, можна вказувати кінцеві точки, виконувати гама-корекцію і вбудовувати колірні профілі ICC.
Будова
Офіційну інформацію щодо формату BMP можна знайти в MSDN або в довідці Microsoft Windows SDK (може йти в комплекті з деякими IDE)[4]. У файлі wingdi.h
від компанії Microsoft є всі оголошення мовою C++, які стосуються даного формату. У цей файл не були включені оголошення типів, оскільки від цього він може стати занадто громіздким. До того ж офіційні оголошення деякі розробники можуть вважати незручними і тому їх необхідність сумнівна. Якщо вам будуть потрібні оригінальні імена констант, структур, типів та їх полів, то всі вони є в тексті даної статті.
Максимальний розмір неподільних комірок (за винятком полів бітових структур): 32 біта і тому формат можна класифікувати як 32-бітний. Винятком можуть бути 64-бітові пікселі, але значення їх каналів можна обробляти і 16-бітними словами. Порядок байтів в 16-бітних і 32-бітових комірках усюди від меншого до більшого. Цілі числа записуються в прямому коді, зі знаком — в доповняльному. Якщо порівнювати з апаратними архітектурами, то порядок байтів і формат чисел відповідає архітектурі x86.
Можна зустріти чотири числових типи:
- BYTE — 8-бітове беззнаковое ціле.
- WORD —16-бітове беззнаковое ціле.
- DWORD — 32-бітове беззнаковое ціле.
- LONG —32-бітове ціле зі знаком.
У форматі Windows Bitmap під структурами розуміється блок з послідовними комірками різного фіксованого розміру, у яких є умовні імена (є в багатьох мовах програмування), а не щось складніше (наприклад, потік команд довільного розміру).
У деяких елементів формату вказана версія Windows, починаючи з якої він підтримується. Мова йде в першу чергу про основні бібліотеки WinAPI такі як gdi32.dll, shell32.dll, user32.dll
і kernel32.dll
. Інші компоненти операційної системи (наприклад, GDI+,. NET, DirectX) можуть мати інші більш широкі можливості.
Структура файлу
BMP-файл складається з чотирьох частин:
- Заголовок файлу (BITMAPFILEHEADER)
- Заголовок зображення (BITMAPINFOHEADER, може бути відсутнім). BITMAPV4HEADER (Win95, NT4.0) BITMAPV5HEADER (Win98/Me, 2000/XP)
- Палітра (може бути відсутнім)
- Саме зображення
BITMAPFILEHEADER
BITMAPFILEHEADER — 14-байтна структура, яка розташована в самому початку файлу. Зверніть увагу на те, що з самого початку структури збивається вирівнювання комірок. Якщо для вас воно важливе, то в оперативній пам'яті даний заголовок розташовуйте за парними адресами, які не кратні чотирьом (тоді 32-бітові комірки потраплять на вирівняні позиції).
Поз. (hex) |
Розмір (байти) |
Ім'я | Тип WinAPI | Опис |
---|---|---|---|---|
00 | 2 | bfType | WORD | Відмітка для відмінності формату від інших (сигнатура формату). Може містити єдине значення 4D4216/424D16 (little-endian/big-endian), що відповідає значенню BM в стандарті ASCII.
|
02 | 4 | bfSize | DWORD | Розмір файлу в байтах. |
06 | 2 | bfReserved1 | WORD | Зарезервовані і повинні містити нуль. |
08 | 2 | bfReserved2 | WORD | |
0A | 4 | bfOffBits | DWORD | Положення піксельних даних відносно початку даної структури (в байтах)). |
Сигнатура формату при перегляді вмісту файлу текстом у двійковому режимі виглядає як пара ASCII-символів «BM».
BITMAPINFO
BITMAPINFO у файлі йде відразу за BITMAPFILEHEADER. Адреса цього блоку в пам'яті безпосередньо так само передається деяким функціям WinAPI (наприклад, SetDIBitsToDevice або CreateDIBitmap). Крім цього, цей же блок використовується у форматах значків і курсорів Windows, але в даній статті цей момент не розглядається (див. окремі описи цих форматів). Дана структура є основною і описовою у форматі BMP і тому коли просто згадано ім'я поля, то мова йде про поле в даній структурі.
Блок BITMAPINFO складається з трьох частин:
- Структура з інформаційними полями.
- Бітові маски для вилучення значень колірних каналів (присутні не завжди).
- Таблиця кольорів (присутня не завжди).
У момент написання даної статті структура з інформаційними полями мала чотири версії: CORE, 3, 4 і 5. Для кожної версії Microsoft оголосила чотири окремі структури з різними іменами полів. У даній статті при згадці поля, яке присутнє в декількох структурах, береться загальна для всіх структур частина в кінці імені (наприклад, BitCount замість bcBitCount, biBitCount, bV4BitCount або bV5BitCount). Версію структури можна визначити по першому 32-бітному середовищу (WinAPI — тип DWORD), яке містить її розмір в байтах (беззнаковим цілим). Версія CORE відрізняється від всіх своєю компактністю і використанням виключно 16-бітних беззнакових полів. Інші три містять ідентичні комірки, до яких в кожній новій версії додавалися нові.
Версія | Розмір (байти) |
Ім'я структури | Версія Windows 9x/NT[5] | Версія Windows CE/Mobile[6] | Примітки |
---|---|---|---|---|---|
CORE | 12 | BITMAPCOREHEADER | 95/NT 3.1 і старше | CE 2.0/Mobile 5.0 і старше | Містить тільки ширину, висоту і бітність растра. |
3 | 40 | BITMAPINFOHEADER | 95/NT 3.1 і старше | CE 1.0/Mobile 5.0 і старше | Містить ширину, висоту і бітність растра, також формат пікселів, інформацію про кольорові таблиці та роздільну здатність. |
4 | 108 | BITMAPV4HEADER | 95/NT 4.0 і старше | не підтримується | Окремо виділені маски каналів, додана інформація про кольоровий простір і гаму. |
5 | 124 | BITMAPV5HEADER | 98/2000 і старше | не підтримується | Додано вказівку кращої стратегії відображення та підтримка профілів ICC. |
Через ідентичності полів у версіях 3, 4 і 5 може здатися що полем Size можна регулювати кількість полів, прибираючи невикористовувані. Насправді це не коректно, оскільки тут розмір грає роль версії (у версії CORE хоч і теж ідентичні поля, але іншого розміру і типу). Ніхто не гарантує що вам не можуть попастися заголовки менших або більших розмірів з іншим набором полів. Проте, Adobe Photoshop може при збереженні файлів BMP записувати структури інформаційних полів з розмірами 52 і 56 байт. По суті це урізана 4-та версія, яка містить тільки бітові маски каналів (56 байт — версія з альфа-каналом).
16-бітові інформаційні поля (версія CORE)
Зверніть увагу на те, що тут поля ширини і висоти містять беззнакові цілі, у той час як 32-бітові структури зберігають значення зі знаком.
Позиція в файлі (hex) |
Позиція в структурі (hex) |
Розмір (байти) |
Ім'я | Тип WinAPI | Опис |
---|---|---|---|---|---|
0E | 00 | 4 | bcSize | DWORD | Розмір даної структури в байтах, який вказує так само на версію структури (тут має бути значення 12). |
12 | 04 | 2 | bcWidth | WORD | Ширина (bcWidth) і висота (bcHeight) растра в пікселях. Вказуються цілим числом без знака. Значення 0 не задокументовані. |
14 | 06 | 2 | bcHeight | WORD | |
16 | 08 | 2 | bcPlanes | WORD | У BMP допустимо тільки значення 1. Це поле використовується в значках і курсорах Windows. |
18 | 0A | 2 | bcBitCount | WORD | Кількість біт на піксель (список підтримуваних дивіться в окремому розділі нижче). |
32-бітові інформаційні поля (версії 3, 4 і 5)
У таблиці нижче поля представлені оглядово. Детальну інформацію ви можете знайти в розділах далі.
Позиція в файлі (hex) |
Позиція в структурі (hex) |
Розмір (байти) |
Ім'я (версії 3/4/5) |
Тип WinAPI | Опис |
---|---|---|---|---|---|
0E | 00 | 4 | biSize bV4Size bV5Size |
DWORD | Розмір даної структури в байтах, який вказує так само на версію структури. |
12 | 04 | 4 | biWidth bV4Width bV5Width |
LONG | Ширина растра в пікселях. Вказується цілим числом зі знаком. Нуль і від'ємні не задокументовані. |
16 | 08 | 4 | biHeight bV4Height bV5Height |
LONG | Ціле число зі знаком, що містить два параметри: висота растра в пікселях (абсолютне значення числа) і порядок проходження рядків у двовимірних масивах (знак числа). Нульове значення не задокументовано. |
1A | 0C | 2 | biPlanes bV4Planes bV5Planes |
WORD | У BMP допустимо тільки значення 1. Це поле використовується в значках і курсорах Windows. |
1C | 0E | 2 | biBitCount bV4BitCount bV5BitCount |
WORD | Кількість біт на піксель |
1E | 10 | 4 | biCompression bV4V4Compression bV5Compression |
DWORD | Вказує на спосіб зберігання пікселів. |
22 | 14 | 4 | biSizeImage bV4SizeImage bV5SizeImage |
DWORD | Розмір піксельних даних в байтах. Може бути обнулено якщо зберігання здійснюється двовимірним масивом. |
26 | 18 | 4 | biXPelsPerMeter bV4XPelsPerMeter bV5XPelsPerMeter |
LONG | Кількість пікселів на метр по горизонталі і вертикалі. |
2A | 1C | 4 | biYPelsPerMeter bV4YPelsPerMeter bV5YPelsPerMeter |
LONG | |
2E | 20 | 4 | biClrUsed bV4ClrUsed bV5ClrUsed |
DWORD | Розмір таблиці кольорів в комірках. |
32 | 24 | 4 | biClrImportant bV4ClrImportant bV5ClrImportant |
DWORD | Кількість комірок від початку таблиці кольорів до останньої використовуваної (включаючи її саму). |
Додані у версії 4 | |||||
Позиція в файлі (hex) |
Позиція в структурі (hex) |
Розмір (байти) |
Ім'я (версиії 4/5) |
Тип WinAPI | Опис |
36 | 28 | 4 | bV4RedMask bV5RedMask |
DWORD | Бітові маски для вилучення значень каналів: інтенсивність червоного, зеленого, синього і значення альфа-каналу. |
3A | 2C | 4 | bV4GreenMask bV5GreenMask |
DWORD | |
3E | 30 | 4 | bV4BlueMask bV5BlueMask |
DWORD | |
42 | 34 | 4 | bV4AlphaMask bV5AlphaMask |
DWORD | |
46 | 38 | 4 | bV4CSType bV5CSType |
DWORD | Вид колірного простору]. |
4A | 3C | 36 | bV4Endpoints bV5Endpoints |
CIEXYZTRIPLE | Значення цих чотирьох полів береться до уваги тільки якщо поле CSType містить 0 (LCS_CALIBRATED_RGB). Тоді кінцеві точки і значення гами для трьох колірних компонент вказуються в цих полях. |
6E | 60 | 4 | bV4GammaRed bV5GammaRed |
DWORD | |
72 | 64 | 4 | bV4GammaGreen bV5GammaGreen |
DWORD | |
76 | 68 | 4 | bV4GammaBlue bV5GammaBlue |
DWORD | |
Додані у версії 5 | |||||
Позиція в файлі (hex) |
Позиція в структурі (hex) |
Розмір (байти) |
Ім'я | Тип WinAPI | Опис |
7A | 6C | 4 | bV5Intent | DWORD | Переваги при рендерингу растру. |
7E | 70 | 4 | bV5ProfileData | DWORD | Зсув у байтах колірного профілю від початку BITMAPINFO. |
82 | 74 | 4 | bV5ProfileSize | DWORD | Якщо в BMP безпосередньо включається колірний профіль, то тут вказується його розмір в байтах. |
86 | 78 | 4 | bV5Reserved | DWORD | Зарезервовано і повинно бути нульовим. |
Метод стиснення (biCompression 1E) може бути:
Значення | Ідентифіковано за | Компресійний метод | Коментарі |
---|---|---|---|
0 | BI_RGB | жодного | Найбільш поширений |
1 | BI_RLE8 | RLE 8 біт/піксель | Можна використовувати лише з 8-бітовими/піксельними растровими зображеннями |
2 | BI_RLE4 | RLE 4 біт/піксель | Можна використовувати лише з 4-бітовими/піксельними растровими зображеннями |
3 | BI_BITFIELDS | OS22XBITMAPHEADER : Хаффман 1D | BITMAPV2INFOHEADER : бітові маски поля RGB, BITMAPV3INFOHEADER + : RGBA |
4 | BI_JPEG | OS22XBITMAPHEADER : RLE-24 | BITMAPV4INFOHEADER + : зображення JPEG для друку |
5 | BI_PNG | BITMAPV4INFOHEADER + : PNG зображення для друку | |
6 | BI_ALPHABITFIELDS | Маски бітового поля RGBA | лише Windows CE 5.0 з .NET 4.0 або новішої версії |
11 | BI_CMYK | жодного | тільки метафайл Windows CMYK |
12 | BI_CMYKRLE8 | RLE-8 | тільки Windows Metafile CMYK |
13 | BI_CMYKRLE4 | RLE-4 | тільки Windows Metafile CMY |
Таблиця кольорів
Таблиця кольорів (палітра) міститься у файлі зображення BMP безпосередньо після заголовка файлу BMP, заголовка DIB і після необов’язкових трьох або чотирьох бітових масок, якщо використовується заголовок BITMAPINFOHEADER з параметром BI_BITFIELDS (12 байт) або BI_ALPHABITFIELDS (16 байт). . Таким чином, його зміщення є розміром BITMAPFILEHEADER плюс розмір заголовка DIB (плюс необов'язкові 12-16 байт для трьох або чотирьох бітових масок). Примітка: у Windows CE заголовок BITMAPINFOHEADER можна використовувати з параметром BI_ALPHABITFIELDS в члені biCompression.
Кількість записів у палітрі дорівнює або 2 n (де n — кількість бітів на піксель), або менша кількість, зазначена в заголовку (у форматі заголовка OS/2 BITMAPCOREHEADER підтримується лише повнорозмірна палітра). У більшості випадків кожен запис у таблиці кольорів займає 4 байти в порядку синього, зеленого, червоного, 0x00 (виключення див. нижче). Це індексується в BITMAPINFOHEADER в члені структури biBitCount.
Таблиця кольорів - це блок байтів (таблиця), в якому перераховані кольори, які використовуються зображенням. Кожен піксель в індексованому кольоровому зображенні описується кількістю бітів (1, 4 або 8), що є індексом одного кольору, описаного в цій таблиці. Метою колірної палітри в індексованих бітових зображеннях є інформування програми про фактичний колір, якому відповідає кожне з цих значень індексу. Мета таблиці кольорів в неіндексованих (не палетизованих) растрових зображеннях полягає в тому, щоб перерахувати кольори, які використовуються растром для цілей оптимізації на пристроях з обмеженими можливостями відображення кольорів, а також для полегшення майбутнього перетворення в різні формати пікселів і палітри.
Кольори в таблиці кольорів зазвичай вказуються у форматі RGBA32 із 4 байтами на запис . Таблиця кольорів, що використовується з OS/2 BITMAPCOREHEADER , використовує формат RGB24 із 3 байтами на запис . Для DIB, завантажених у пам'ять, таблиця кольорів може додатково складатися з 2-байтових записів – ці записи становлять індекси до поточної реалізованої палітри замість явних визначень кольору RGB.
Microsoft не забороняє наявність дійсної бітової маски альфа-каналу в BITMAPV4HEADER і BITMAPV5HEADER для індексованих кольорових зображень 1bpp, 4bpp і 8bpp, що вказує на те, що записи таблиці кольорів також можуть вказувати альфа-компонент за допомогою 8.8.8.[ 0-8].[0-8] формат через член RGBQUAD.rgbReserved . Однак деякі версії документації Microsoft забороняють цю функцію, вказуючи, що член RGBQUAD.rgbReserved «повинен бути нульовим».
Як згадувалося вище, таблиця кольорів зазвичай не використовується, якщо пікселі мають формат 16 біт на піксель (16 bpp) (і вище); зазвичай у цих файлах растрових зображень немає записів таблиці кольорів. Однак документація Microsoft (на веб-сайті MSDN від 16 листопада 2010 р. ) визначає, що для 16bpp (і вище) таблиця кольорів може бути присутнім для зберігання списку кольорів, призначених для оптимізації на пристроях з обмеженою можливість кольорового відображення, а також вказує, що в таких випадках у цій таблиці кольорів немає індексованих записів палітри. Це може здатися протиріччям, якщо не робити різниці між обов’язковими записами палітри та додатковим списком кольорів.
Пам'ять пікселів
Біти, що представляють растрові пікселі, упаковані в рядки. Розмір кожного рядка округлюється до кратного 4 байтам
(32-бітове DWORD ) шляхом заповнення.
Для зображень з висотою понад 1 кілька доповнених рядків зберігаються послідовно, утворюючи масив пікселів.
Піксельний масив (растрові дані)
Масив пікселів являє собою блок 32-бітових DWORD, який описує зображення піксель за пікселем.
Зазвичай пікселі зберігаються «знизу вгору» , починаючи з лівого нижнього кута, переходячи зліва направо, а потім ряд за рядком знизу вгору зображення. Якщо не використовується BITMAPCOREHEADER , нестиснені растрові зображення Windows також можна зберігати зверху вниз, якщо значення висоти зображення є негативним.
У оригінальній OS/2 DIB єдиними чотирма допустимими значеннями глибини кольору були 1, 4, 8 і 24 біти на піксель (bpp). Сучасні заголовки DIB дозволяють використовувати піксельні формати з 1, 2, 4, 8, 16, 24 і 32 бітами на піксель (bpp). GDI+ також дозволяє 64 біта на піксель.
Байти заповнення (не обов’язково 0) мають бути додані до кінця рядків, щоб збільшити довжину рядків до чотирьох байтів. Коли масив пікселів завантажується в пам’ять, кожен рядок має починатися з адреси пам’яті, кратної 4. Це обмеження адреси/зміщення є обов’язковим лише для масивів пікселів, завантажених у пам’ять. Для цілей зберігання файлів лише розмір кожного рядка має бути кратним 4 байтам, тоді як зміщення файлу може бути довільним. 24-бітове растрове зображення з Width=1 матиме 3 байти даних на рядок (синій, зелений, червоний) і 1 байт заповнення, тоді як Width=2 матиме 6 байтів даних і 2 байти заповнення, Width=3 матиме 9 байтів даних і 3 байти заповнення, а Width=4 матиме 12 байтів даних без заповнення.
Стиснення
- Індексовані кольорові зображення можуть бути стиснуті за допомогою 4-розрядного або 8-бітового алгоритму RLE або Хаффмана 1D.
- Зображення OS/2 BITMAPCOREHEADER 2 24bpp можуть бути стиснуті за допомогою 24-бітного алгоритму RLE.
- Зображення 16bpp і 32bpp завжди зберігаються без стиснення.
- Зауважте, що зображення будь-якої глибини кольору можна зберігати без стиснення, якщо це потрібно.
Піксельний формат
- Формат 1 біт на піксель (1 bpp) підтримує 2 різні кольори (наприклад: чорний і білий). Значення пікселів зберігаються в кожному біті, причому перший (крайній лівий) піксель у самому значущому біті першого байта. Кожен біт є індексом у таблицю з 2 кольорів. Невстановлений біт буде посилатися на перший запис таблиці кольорів, а встановлений біт – до останнього (другого) запису таблиці кольорів.
- Формат 2-біт на піксель (2bpp) підтримує 4 різні кольори і зберігає 4 пікселі на 1 байт, крайній лівий піксель знаходиться в двох найбільш значущих бітах ( лише для Windows CE : ). Кожне значення пікселя є 2-бітовим індексом у таблиці до 4 кольорів.
- Формат 4-біт на піксель (4bpp) підтримує 16 різних кольорів і зберігає 2 пікселі на 1 байт, причому крайній лівий піксель знаходиться у більш значному фрагменті . Кожне значення пікселя є 4-бітовим індексом у таблиці до 16 кольорів.
- Формат 8 біт на піксель (8 bpp) підтримує 256 різних кольорів і зберігає 1 піксель на 1 байт. Кожен байт є індексом у таблицю до 256 кольорів.
- Формат 16 біт на піксель (16 bpp) підтримує 65536 різних кольорів і зберігає 1 піксель на 2-байтове WORD. Кожне СЛОВО може визначати альфа-, червоний, зелений та синій вибірки пікселя.
- Формат 24-бітного пікселя (24 bpp) підтримує 16 777 216 різних кольорів і зберігає значення 1 пікселя на 3 байти. Кожне значення пікселя визначає червоні, зелені та сині зразки пікселя (8.8.8.0.0 у нотації RGBAX). Зокрема, в порядку: синій, зелений і червоний (8 біт на кожну вибірку).
- Формат 32-біт на піксель (32bpp) підтримує 4,294,967,296 різних кольорів і зберігає 1 піксель на 4-байтовий DWORD. Кожне DWORD може визначити альфа-, червоний, зелений та синій вибірки пікселя.
Щоб вирішити неоднозначність того, які біти визначають, які вибірки, заголовки DIB надають певні значення за замовчуванням, а також конкретні BITFIELDS, які є бітовими масками, які визначають належність певної групи бітів у пікселі до певного каналу . Наведена нижче діаграма визначає цей механізм:
Приклад 1 https://en.wikipedia.org/wiki/File:Bmp_format.svg
Зверніть увагу, що растрові дані починаються з нижнього лівого кута зображення.
Нижче наведено приклад растрового зображення 2×2 пікселя, 24-розрядного (заголовок Windows DIB BITMAPINFOHEADER ) з піксельний формат RGB24.
Зміщення | Розмір | Шістнадцяткове значення | Значення | Опис |
---|---|---|---|---|
Заголовок BMP | ||||
0h | 2 | 42 4D | "BМ" | Поле ідентифікатора (42h, 4h) |
2h | 4 | 46 00 00 00 | 70 байт (54+16) | Розмір файлу BMP (заголовок 54 байти + 16 байт даних) |
6h | 2 | 00 00 | Невикористаний | Специфічне застосування |
8h | 2 | 00 00 | Невикористаний | Специфічне застосування |
Ah | 4 | 36 00 00 00 | 54 байти (14+40) | Зміщення, де можна знайти масив пікселів (растрові дані). |
Заголовок DIB | ||||
Еh | 4 | 28 00 00 00 | 40 байт | Кількість байтів у заголовку DIB (з цього моменту) |
12h | 4 | 02 00 00 00 | 2 пікселі (порядок зліва направо) | Ширина растрового зображення в пікселях |
16h | 4 | 02 00 00 00 | 2 пікселі (знизу вгору) | Висота растрового зображення в пікселях. Позитивний для порядку пікселів знизу вгору. |
1Аh | 2 | 01 00 | 1 літак | Кількість кольорових площин, що використовуються |
1Ch | 2 | 18 00 | 24 біти | Кількість бітів на піксель |
1Еh | 4 | 00 00 00 00 | 0 | BI_RGB, стиснення масиву пікселів не використовується |
22h | 4 | 10 00 00 00 | 16 байт | Розмір необроблених растрових даних (включаючи заповнення) |
26h | 4 | 13 0B 00 00 | 2835 пікселів/метр по горизонталі | Роздільна здатність друку зображення,
72 DPI × 39,3701 дюйма на метр, дає 2834,6472 |
2Ah | 4 | 13 0B 00 00 | 2835 пікселів/метр по вертикалі | |
2Еh | 4 | 00 00 00 00 | 0 кольорів | Кількість кольорів у палітрі |
32h | 4 | 00 00 00 00 | 0 важливих кольорів | 0 означає, що всі кольори важливі |
Початок масиву пікселів (растрові дані) | ||||
36h | 3 | 00 00 FF | 0 0 255 | Червоний, піксель (0,1) |
39h | 3 | FF FF FF | 255 255 255 | Білий, піксель (1,1) |
3Ch | 2 | 00 00 | 0 0 | Заповнення для 4-байтового вирівнювання (може бути значенням, відмінним від нуля) |
3Еh | 3 | FF 00 00 | 255 0 0 | синій, піксель (0,0) |
41h | 3 | 00 FF 00 | 0 255 0 | Зелений, піксель (1,0) |
44h | 2 | 00 00 | 0 0 | Заповнення для 4-байтового вирівнювання (може бути значенням, відмінним від нуля) |
Приклад 2 растрового зображення 4×2 пікселя з кодуванням 32 біти/піксель
Приклад 2 0,2: red FF00000 FF
Зверніть увагу, що растрові дані починаються з нижнього лівого кута зображення.
Нижче наведено приклад 32-розрядного растрового зображення розміром 4×2 пікселя зі значеннями непрозорості в альфа-каналі (заголовок Windows DIB BITMAPV4HEADER ) з піксельним форматом ARGB32.
Зміщення | Розмір | Шістнадцяткове значення | Значення | Опис |
---|---|---|---|---|
Заголовок BMP | ||||
0h | 2 | 42 4D | "БМ" | Поле ідентифікатора (42h, 4Dh) |
2h | 4 | 9A 00 00 00 | 154 байти (122+32) | Розмір файлу BMP |
6h | 2 | 00 00 | Невикористаний | Специфічне застосування |
8h | 2 | 00 00 | Невикористаний | Специфічне застосування |
Ah | 4 | 7A 00 00 00 | 122 байти (14+108) | Зміщення, де можна знайти масив пікселів (растрові дані). |
Заголовок DIB | ||||
Еh | 4 | 6C 00 00 00 | 108 байт | Кількість байтів у заголовку DIB (з цього моменту) |
12h | 4 | 04 00 00 00 | 4 пікселі (порядок зліва направо) | Ширина растрового зображення в пікселях |
16h | 4 | 02 00 00 00 | 2 пікселі (знизу вгору) | Висота растрового зображення в пікселях |
1Аh | 2 | 01 00 | 1 літак | Кількість кольорових площин, що використовуються |
1Ch | 2 | 20 00 | 32 біти | Кількість бітів на піксель |
1Еh | 4 | 03 00 00 00 | 3 | BI_BITFIELDS, стиснення масиву пікселів не використовується |
22h | 4 | 20 00 00 00 | 32 байти | Розмір необроблених растрових даних (включаючи заповнення) |
26h | 4 | 13 0B 00 00 | 2835 пікселів/метр по горизонталі | Роздільна здатність друку зображення,
72 DPI × 39,3701 дюйма на метр, дає 2834,6472 |
2Ah | 4 | 13 0B 00 00 | 2835 пікселів/метр по вертикалі | |
2Еh | 4 | 00 00 00 00 | 0 кольорів | Кількість кольорів у палітрі |
32h | 4 | 00 00 00 00 | 0 важливих кольорів | 0 означає, що всі кольори важливі |
36h | 4 | 00 00 FF 00 | 00FF0000 у великому байті | Червона бітова маска каналу (дійсна, оскільки вказано BI_BITFIELDS) |
3Ah | 4 | 00 FF 00 00 | 0000FF00 у великому рядку | Зелена бітова маска каналу (дійсна, оскільки вказано BI_BITFIELDS) |
3Еh | 4 | FF 00 00 00 | 000000FF у великому байті | Блакитна маска каналу (дійсна, оскільки вказано BI_BITFIELDS) |
42h | 4 | 00 00 00 FF | FF000000 у великому байті | бітова маска альфа-каналу |
46h | 4 | 20 6E 69 57 | маленький рядок " Win " |
LCS_WINDOWS_COLOR_SPACE |
4Аh | 24 год | 24 години* 00...00 | Кінцеві точки колірного простору CIEXYZTRIPLE | Не використовується для LCS " Win " або " sRGB " |
6Еh | 4 | 00 00 00 00 | 0 Червона Гама | Не використовується для LCS " Win " або " sRGB " |
72h | 4 | 00 00 00 00 | 0 Зелена Гама | Не використовується для LCS " Win " або " sRGB " |
76h | 4 | 00 00 00 00 | 0 Синя гамма | Не використовується для LCS " Win " або " sRGB " |
Початок масиву пікселів (растрових даних) | ||||
7Аh | 4 | FF 00 00 7F | 255 0 0 127 | Синій (альфа: 127), піксель (1,0) |
7Еh | 4 | 00 FF 00 7F | 0 255 0 127 | Зелений (альфа: 127), піксель (1,1) |
82h | 4 | 00 00 FF 7F | 0 0 255 127 | Червоний (альфа: 127), піксель (1,2) |
86h | 4 | FF FF FF 7F | 255 255 255 127 | Білий (альфа: 127), піксель (1,3) |
8Аh | 4 | FF 00 00 FF | 255 0 0 255 | Синій (альфа: 255), піксель (0,0) |
8Еh | 4 | 00 FF 00 FF | 0 255 0 255 | Зелений (альфа: 255), піксель (0,1) |
92h | 4 | 00 00 FF FF | 0 0 255 255 | Червоний (альфа: 255), піксель (0,2) |
96h | 4 | FF FF FF FF | 255 255 255 255 | Білий (альфа: 255), піксель (0,3) |
Примітки
- Pachghare, V. K. (2005-12). Comprehensive Computer Graphics (including C++) (англ.). Laxmi Publications. ISBN 978-81-7008-185-2.
- Image File Formats Guide. What Is: JPG, GIF, BMP, EPS, PCX, XPS?. Master Bundles (амер.). 5 жовтня 2021. Процитовано 30 листопада 2021.
- A Beginners Guide to Bitmaps. paulbourke.net. Процитовано 30 листопада 2021.
- Bitmap image file extensions list. www.file-extensions.org (англ.). Процитовано 30 листопада 2021.
- Інформація про версії взята з довідки по Microsoft Windows SDK, йде в комплекті з Microsoft Visual Studio 2008 и Embarcadero RAD Studio 2010 (розділ «Requirements» в статтях про дані структури).
- Див. розділи «Requirements» в статтях «BITMAPCOREHEADER» і «BITMAPINFOHEADER» стосовно доWindows Mobile 6.5 на MSDN.