BMP

BMP (Bitmap) bitmap-формат або DIB (англ. device independent bitmap) — формат файлу зображень растрової графіки, де зображення зберігається у вигляді двовимірного масиву з пікселів, кожен піксель має власний колір[1]. Запам'ятовує одно- й багатокольорові (RGB) ілюстрації у формі Pixel. Формат почав використовуватися в операційних системах Windows та OS/2, у новіших версіях яких поступившися форматам SVG, JPEG, GIF. Дані цього формату включаються в двійкові файли ресурсів RES і в PE-файли.

Windows Bitmap
Розширення файлу: .bmp, .dib
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 файлу

BMP-файл складається з чотирьох частин:

  1. Заголовок файлу (BITMAPFILEHEADER)
  2. Заголовок зображення (BITMAPINFOHEADER, може бути відсутнім). BITMAPV4HEADER (Win95, NT4.0) BITMAPV5HEADER (Win98/Me, 2000/XP)
  3. Палітра (може бути відсутнім)
  4. Саме зображення

BITMAPFILEHEADER

BITMAPFILEHEADER — 14-байтна структура, яка розташована в самому початку файлу. Зверніть увагу на те, що з самого початку структури збивається вирівнювання комірок. Якщо для вас воно важливе, то в оперативній пам'яті даний заголовок розташовуйте за парними адресами, які не кратні чотирьом (тоді 32-бітові комірки потраплять на вирівняні позиції).

Поз.
(hex)
Розмір
(байти)
Ім'я Тип WinAPI Опис
00 2 bfType WORD Відмітка для відмінності формату від інших (сигнатура формату). Може містити єдине значення 4D4216/424D16 (little-endian/big-endian), що відповідає значенню BM в стандарті ASCII.
  • BM — Windows 3.1x, 95, NT, … .
  • BA — OS/2 struct bitmap масив
  • CI — OS/2 struct color зображення
  • CP — OS/2 const color вказівник
  • IC — OS/2 struct зображення
  • PT — OS/2 вказівник
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 складається з трьох частин:

  1. Структура з інформаційними полями.
  2. Бітові маски для вилучення значень колірних каналів (присутні не завжди).
  3. Таблиця кольорів (присутня не завжди).

У момент написання даної статті структура з інформаційними полями мала чотири версії: 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)

Примітки

  1. Pachghare, V. K. (2005-12). Comprehensive Computer Graphics (including C++) (англ.). Laxmi Publications. ISBN 978-81-7008-185-2.
  2. Image File Formats Guide. What Is: JPG, GIF, BMP, EPS, PCX, XPS?. Master Bundles (амер.). 5 жовтня 2021. Процитовано 30 листопада 2021.
  3. A Beginners Guide to Bitmaps. paulbourke.net. Процитовано 30 листопада 2021.
  4. Bitmap image file extensions list. www.file-extensions.org (англ.). Процитовано 30 листопада 2021.
  5. Інформація про версії взята з довідки по Microsoft Windows SDK, йде в комплекті з Microsoft Visual Studio 2008 и Embarcadero RAD Studio 2010 (розділ «Requirements» в статтях про дані структури).
  6. Див. розділи «Requirements» в статтях «BITMAPCOREHEADER» і «BITMAPINFOHEADER» стосовно доWindows Mobile 6.5 на MSDN.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.