BMP (Bitmap) — bitmap-формат або DIB (англ. device independent bitmap) — формат файлу зображень растрової графіки, де зображення зберігається у вигляді двовимірного масиву з пікселів, кожен піксель має власний колір. Запам'ятовує одно- й багатокольорові (RGB) ілюстрації у формі Pixel. Формат почав використовуватися в операційних системах Windows та (OS/2), у новіших версіях яких поступившися форматам SVG, JPEG, GIF. Дані цього формату включаються в двійкові файли ресурсів RES і в .
Розширення файлу: | .bmp, .dib |
---|---|
MIME-тип: |
|
Type code: | 'BMP ' 'BMPf' 'BMPp' |
Узагальнений ідентифікатор типу: | com.microsoft.bmp |
Тип формату: | Графічний формат |
Формат файлу BMP здатний зберігати 2D цифрові зображення довільної ширини, висоти та роздільної здатності, як монохромні так і кольорові, різної глибини кольору, і, необов'язково, зі стисненням даних, альфа-каналом та . Специфікація Windows Metafile (WMF) охоплює формат файлу BMP. Серед іншого, wingdi.h
визначає BMP-константи та структури. Растрова графіка загалом і Bitmap зокрема залежать від роздільної здатності, так при збільшенні розмірів зображення буде поступово погіршуватися його якість.
Можливості формату
У даному форматі можна зберігати тільки одношарові растри. На кожен піксель в різних файлах може приходити різна кількість біт (глибина кольору). Microsoft пропонує бітності 1, 2, 4, 8, 16, 24, 32, 48 і 64. В бітності 8 і нижче він вказується індексом з таблиці кольорів (палітри), а при великих: безпосереднім значенням. Колір же в будь-якому випадку можна задати тільки в колірній моделі RGB, але в бітності 16 і 32 можна отримати відтінки сірого з глибиною до 16 і 32-ох біт відповідно. Часткова прозорість реалізована альфа-каналом різних бітностей, але при цьому прозорість без градацій можна побічно отримати RLE-кодуванням. Растрові зображення є прямокутною сіткою пікселів, сітка має певну кількістю пікселів та інформаційний вміст (глибину кольору) на піксель.
У більшості випадків пікселі зберігаються у вигляді відносно простого двовимірного масиву. Для бітності 4 і 8 доступно RLE-кодування, яке може зменшити їх розмір. Формат BMP так само підтримує вбудовування даних у форматах JPEG і PNG. Але останнє скоріше більше призначене не для компактного зберігання, а для обходу обмежень архітектури GDI, яка не передбачає пряму роботу із зображеннями форматів відмінних від BMP.
В останніх версіях формату BMP так само з'явилися можливості управління кольором. Зокрема, можна вказувати кінцеві точки, виконувати гама-корекцію і вбудовувати колірні [en].
Будова
Офіційну інформацію щодо формату BMP можна знайти в MSDN або в довідці Microsoft Windows SDK (може йти в комплекті з деякими IDE). У файлі wingdi.h
від компанії Microsoft є всі оголошення мовою , які стосуються даного формату. У цей файл не були включені оголошення типів, оскільки від цього він може стати занадто громіздким. До того ж офіційні оголошення деякі розробники можуть вважати незручними і тому їх необхідність сумнівна. Якщо вам будуть потрібні оригінальні імена констант, структур, типів та їх полів, то всі вони є в тексті даної статті.
Максимальний розмір неподільних комірок (за винятком полів бітових структур): 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 | Версія Windows CE/Mobile | Примітки |
---|---|---|---|---|---|
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
Зверніть увагу, що растрові дані починаються з нижнього лівого кута зображення.
Нижче наведено приклад растрового зображення 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 | ||||
Eh | 4 | 28 00 00 00 | 40 байт | Кількість байтів у заголовку DIB (з цього моменту) |
12h | 4 | 02 00 00 00 | 2 пікселі (порядок зліва направо) | Ширина растрового зображення в пікселях |
16h | 4 | 02 00 00 00 | 2 пікселі (знизу вгору) | Висота растрового зображення в пікселях. Позитивний для порядку пікселів знизу вгору. |
1Ah | 2 | 01 00 | 1 площина | Кількість кольорових площин, що використовуються |
1Ch | 2 | 18 00 | 24 біти | Кількість бітів на піксель |
1Eh | 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 пікселів/метр по вертикалі | |
2Eh | 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-байтового вирівнювання (може бути значенням, відмінним від нуля) |
3Eh | 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
Зверніть увагу, що растрові дані починаються з нижнього лівого кута зображення.
Нижче наведено приклад 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 | ||||
Eh | 4 | 6C 00 00 00 | 108 байт | Кількість байтів у заголовку DIB (з цього моменту) |
12h | 4 | 04 00 00 00 | 4 пікселі (порядок зліва направо) | Ширина растрового зображення в пікселях |
16h | 4 | 02 00 00 00 | 2 пікселі (знизу вгору) | Висота растрового зображення в пікселях |
1Ah | 2 | 01 00 | 1 площина | Кількість кольорових площин, що використовуються |
1Ch | 2 | 20 00 | 32 біти | Кількість бітів на піксель |
1Eh | 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 пікселів/метр по вертикалі | |
2Eh | 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) |
3Eh | 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 |
4Ah | 24 год | 24 години* 00...00 | Кінцеві точки колірного простору CIEXYZTRIPLE | Не використовується для LCS " Win " або " sRGB " |
6Eh | 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 " |
Початок масиву пікселів (растрових даних) | ||||
7Ah | 4 | FF 00 00 7F | 255 0 0 127 | Синій (альфа: 127), піксель (1,0) |
7Eh | 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) |
8Ah | 4 | FF 00 00 FF | 255 0 0 255 | Синій (альфа: 255), піксель (0,0) |
8Eh | 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) |
Примітки
- [[[:Шаблон:Cite IETF/makelink]] IANA Considerations]. [[[:Шаблон:Cite IETF/makelink]] Windows Image Media Types]. sec. 5. doi:10.17487/RFC7903. .
- Pachghare, V. K. (2005-12). (англ.). Laxmi Publications. ISBN . Архів оригіналу за 30 листопада 2021. Процитовано 30 листопада 2021.
- . Master Bundles (амер.). 5 жовтня 2021. Архів оригіналу за 30 листопада 2021. Процитовано 30 листопада 2021.
- . paulbourke.net. Архів оригіналу за 11 квітня 2022. Процитовано 30 листопада 2021.
- . www.file-extensions.org (англ.). Архів оригіналу за 30 листопада 2021. Процитовано 30 листопада 2021.
- Інформація про версії взята з довідки по Microsoft Windows SDK, йде в комплекті з Microsoft Visual Studio 2008 и Embarcadero RAD Studio 2010 (розділ «Requirements» в статтях про дані структури).
- Див. розділи «Requirements» в статтях «BITMAPCOREHEADER [ 16 вересня 2014 у Wayback Machine.]» і «BITMAPINFOHEADER [ 19 квітня 2014 у Wayback Machine.]» стосовно доWindows Mobile 6.5 на MSDN.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
BMP Bitmap bitmap format abo DIB angl device independent bitmap format fajlu zobrazhen rastrovoyi grafiki de zobrazhennya zberigayetsya u viglyadi dvovimirnogo masivu z pikseliv kozhen piksel maye vlasnij kolir Zapam yatovuye odno j bagatokolorovi RGB ilyustraciyi u formi Pixel Format pochav vikoristovuvatisya v operacijnih sistemah Windows ta OS 2 u novishih versiyah yakih postupivshisya formatam SVG JPEG GIF Dani cogo formatu vklyuchayutsya v dvijkovi fajli resursiv RES i v Windows BitmapRozshirennya fajlu bmp dibMIME tip code image bmp image x bmp neoficijno code Type code BMP BMPf BMPp Uzagalnenij identifikator tipu com microsoft bmpTip formatu Grafichnij format Format fajlu BMP zdatnij zberigati 2D cifrovi zobrazhennya dovilnoyi shirini visoti ta rozdilnoyi zdatnosti yak monohromni tak i kolorovi riznoyi glibini koloru i neobov yazkovo zi stisnennyam danih alfa kanalom ta Specifikaciya Windows Metafile WMF ohoplyuye format fajlu BMP Sered inshogo a href wiki Graphics Device Interface title Graphics Device Interface wingdi h a viznachaye BMP konstanti ta strukturi Rastrova grafika zagalom i Bitmap zokrema zalezhat vid rozdilnoyi zdatnosti tak pri zbilshenni rozmiriv zobrazhennya bude postupovo pogirshuvatisya jogo yakist Mozhlivosti formatuU danomu formati mozhna zberigati tilki odnosharovi rastri Na kozhen piksel v riznih fajlah mozhe prihoditi rizna kilkist bit glibina koloru Microsoft proponuye bitnosti 1 2 4 8 16 24 32 48 i 64 V bitnosti 8 i nizhche vin vkazuyetsya indeksom z tablici koloriv palitri a pri velikih bezposerednim znachennyam Kolir zhe v bud yakomu vipadku mozhna zadati tilki v kolirnij modeli RGB ale v bitnosti 16 i 32 mozhna otrimati vidtinki sirogo z glibinoyu do 16 i 32 oh bit vidpovidno Chastkova prozorist realizovana alfa kanalom riznih bitnostej ale pri comu prozorist bez gradacij mozhna pobichno otrimati RLE koduvannyam Rastrovi zobrazhennya ye pryamokutnoyu sitkoyu pikseliv sitka maye pevnu kilkistyu pikseliv ta informacijnij vmist glibinu koloru na piksel U bilshosti vipadkiv pikseli zberigayutsya u viglyadi vidnosno prostogo dvovimirnogo masivu Dlya bitnosti 4 i 8 dostupno RLE koduvannya yake mozhe zmenshiti yih rozmir Format BMP tak samo pidtrimuye vbudovuvannya danih u formatah JPEG i PNG Ale ostannye skorishe bilshe priznachene ne dlya kompaktnogo zberigannya a dlya obhodu obmezhen arhitekturi GDI yaka ne peredbachaye pryamu robotu iz zobrazhennyami formativ vidminnih vid BMP V ostannih versiyah formatu BMP tak samo z yavilisya mozhlivosti upravlinnya kolorom Zokrema mozhna vkazuvati kincevi tochki vikonuvati gama korekciyu i vbudovuvati kolirni en BudovaOficijnu informaciyu shodo formatu BMP mozhna znajti v MSDN abo v dovidci Microsoft Windows SDK mozhe jti v komplekti z deyakimi IDE U fajli a href wiki Graphics Device Interface title Graphics Device Interface wingdi h a vid kompaniyi Microsoft ye vsi ogoloshennya movoyu C yaki stosuyutsya danogo formatu U cej fajl ne buli vklyucheni ogoloshennya tipiv oskilki vid cogo vin mozhe stati zanadto gromizdkim Do togo zh oficijni ogoloshennya deyaki rozrobniki mozhut vvazhati nezruchnimi i tomu yih neobhidnist sumnivna Yaksho vam budut potribni originalni imena konstant struktur tipiv ta yih poliv to vsi voni ye v teksti danoyi statti Maksimalnij rozmir nepodilnih komirok za vinyatkom poliv bitovih struktur 32 bita i tomu format mozhna klasifikuvati yak 32 bitnij Vinyatkom mozhut buti 64 bitovi pikseli ale znachennya yih kanaliv mozhna obroblyati i 16 bitnimi slovami Poryadok bajtiv v 16 bitnih i 32 bitovih komirkah usyudi vid menshogo do bilshogo Cili chisla zapisuyutsya v pryamomu kodi zi znakom v dopovnyalnomu Yaksho porivnyuvati z aparatnimi arhitekturami to poryadok bajtiv i format chisel vidpovidaye arhitekturi x86 Mozhna zustriti chotiri chislovih tipi BYTE 8 bitove bezznakovoe cile WORD 16 bitove bezznakovoe cile DWORD 32 bitove bezznakovoe cile LONG 32 bitove cile zi znakom U formati Windows Bitmap pid strukturami rozumiyetsya blok z poslidovnimi komirkami riznogo fiksovanogo rozmiru u yakih ye umovni imena ye v bagatoh movah programuvannya a ne shos skladnishe napriklad potik komand dovilnogo rozmiru U deyakih elementiv formatu vkazana versiya Windows pochinayuchi z yakoyi vin pidtrimuyetsya Mova jde v pershu chergu pro osnovni biblioteki WinAPI taki yak gdi32 dll shell32 dll user32 dll i kernel32 dll Inshi komponenti operacijnoyi sistemi napriklad GDI NET DirectX mozhut mati inshi bilsh shiroki mozhlivosti Struktura fajluStruktura BMP fajlu BMP fajl skladayetsya z chotiroh chastin Zagolovok fajlu BITMAPFILEHEADER Zagolovok zobrazhennya BITMAPINFOHEADER mozhe buti vidsutnim BITMAPV4HEADER Win95 NT4 0 BITMAPV5HEADER Win98 Me 2000 XP Palitra mozhe buti vidsutnim Same zobrazhennya BITMAPFILEHEADER BITMAPFILEHEADER 14 bajtna struktura yaka roztashovana v samomu pochatku fajlu Zvernit uvagu na te sho z samogo pochatku strukturi zbivayetsya virivnyuvannya komirok Yaksho dlya vas vono vazhlive to v operativnij pam yati danij zagolovok roztashovujte za parnimi adresami yaki ne kratni chotirom todi 32 bitovi komirki potraplyat na virivnyani poziciyi Poz hex Rozmir bajti Im ya Tip WinAPI Opis 00 2 bfType WORD Vidmitka dlya vidminnosti formatu vid inshih signatura formatu Mozhe mistiti yedine znachennya 4D4216 424D16 little endian big endian sho vidpovidaye znachennyu BM v standarti ASCII BM Windows 3 1x 95 NT BA OS 2 struct bitmap masiv CI OS 2 struct color zobrazhennya CP OS 2 const color vkazivnik IC OS 2 struct zobrazhennya PT OS 2 vkazivnik 02 4 bfSize DWORD Rozmir fajlu v bajtah 06 2 bfReserved1 WORD Zarezervovani i povinni mistiti nul 08 2 bfReserved2 WORD 0A 4 bfOffBits DWORD Polozhennya pikselnih danih vidnosno pochatku danoyi strukturi v bajtah Signatura formatu pri pereglyadi vmistu fajlu tekstom u dvijkovomu rezhimi viglyadaye yak para ASCII simvoliv BM BITMAPINFO BITMAPINFO u fajli jde vidrazu za BITMAPFILEHEADER Adresa cogo bloku v pam yati bezposeredno tak samo peredayetsya deyakim funkciyam WinAPI napriklad SetDIBitsToDevice abo CreateDIBitmap Krim cogo cej zhe blok vikoristovuyetsya u formatah znachkiv i kursoriv Windows ale v danij statti cej moment ne rozglyadayetsya div okremi opisi cih formativ Dana struktura ye osnovnoyu i opisovoyu u formati BMP i tomu koli prosto zgadano im ya polya to mova jde pro pole v danij strukturi Blok BITMAPINFO skladayetsya z troh chastin Struktura z informacijnimi polyami Bitovi maski dlya viluchennya znachen kolirnih kanaliv prisutni ne zavzhdi Tablicya koloriv prisutnya ne zavzhdi U moment napisannya danoyi statti struktura z informacijnimi polyami mala chotiri versiyi CORE 3 4 i 5 Dlya kozhnoyi versiyi Microsoft ogolosila chotiri okremi strukturi z riznimi imenami poliv U danij statti pri zgadci polya yake prisutnye v dekilkoh strukturah beretsya zagalna dlya vsih struktur chastina v kinci imeni napriklad BitCount zamist bcBitCount biBitCount bV4BitCount abo bV5BitCount Versiyu strukturi mozhna viznachiti po pershomu 32 bitnomu seredovishu WinAPI tip DWORD yake mistit yiyi rozmir v bajtah bezznakovim cilim Versiya CORE vidriznyayetsya vid vsih svoyeyu kompaktnistyu i vikoristannyam viklyuchno 16 bitnih bezznakovih poliv Inshi tri mistyat identichni komirki do yakih v kozhnij novij versiyi dodavalisya novi Informacijni strukturi Versiya Rozmir bajti Im ya strukturi Versiya Windows 9x NT Versiya Windows CE Mobile Primitki CORE 12 BITMAPCOREHEADER 95 NT 3 1 i starshe CE 2 0 Mobile 5 0 i starshe Mistit tilki shirinu visotu i bitnist rastra 3 40 BITMAPINFOHEADER 95 NT 3 1 i starshe CE 1 0 Mobile 5 0 i starshe Mistit shirinu visotu i bitnist rastra takozh format pikseliv informaciyu pro kolorovi tablici ta rozdilnu zdatnist 4 108 BITMAPV4HEADER 95 NT 4 0 i starshe ne pidtrimuyetsya Okremo vidileni maski kanaliv dodana informaciya pro kolorovij prostir i gamu 5 124 BITMAPV5HEADER 98 2000 i starshe ne pidtrimuyetsya Dodano vkazivku krashoyi strategiyi vidobrazhennya ta pidtrimka profiliv ICC Cherez identichnosti poliv u versiyah 3 4 i 5 mozhe zdatisya sho polem Size mozhna regulyuvati kilkist poliv pribirayuchi nevikoristovuvani Naspravdi ce ne korektno oskilki tut rozmir graye rol versiyi u versiyi CORE hoch i tezh identichni polya ale inshogo rozmiru i tipu Nihto ne garantuye sho vam ne mozhut popastisya zagolovki menshih abo bilshih rozmiriv z inshim naborom poliv Prote Adobe Photoshop mozhe pri zberezhenni fajliv BMP zapisuvati strukturi informacijnih poliv z rozmirami 52 i 56 bajt Po suti ce urizana 4 ta versiya yaka mistit tilki bitovi maski kanaliv 56 bajt versiya z alfa kanalom 16 bitovi informacijni polya versiya CORE Zvernit uvagu na te sho tut polya shirini i visoti mistyat bezznakovi cili u toj chas yak 32 bitovi strukturi zberigayut znachennya zi znakom Poziciya v fajli hex Poziciya v strukturi hex Rozmir bajti Im ya Tip WinAPI Opis 0E 00 4 bcSize DWORD Rozmir danoyi strukturi v bajtah yakij vkazuye tak samo na versiyu strukturi tut maye buti znachennya 12 12 04 2 bcWidth WORD Shirina bcWidth i visota bcHeight rastra v pikselyah Vkazuyutsya cilim chislom bez znaka Znachennya 0 ne zadokumentovani 14 06 2 bcHeight WORD 16 08 2 bcPlanes WORD U BMP dopustimo tilki znachennya 1 Ce pole vikoristovuyetsya v znachkah i kursorah Windows 18 0A 2 bcBitCount WORD Kilkist bit na piksel spisok pidtrimuvanih divitsya v okremomu rozdili nizhche 32 bitovi informacijni polya versiyi 3 4 i 5 U tablici nizhche polya predstavleni oglyadovo Detalnu informaciyu vi mozhete znajti v rozdilah dali Poziciya v fajli hex Poziciya v strukturi hex Rozmir bajti Im ya versiyi 3 4 5 Tip WinAPI Opis 0E 00 4 biSize bV4Size bV5Size DWORD Rozmir danoyi strukturi v bajtah yakij vkazuye tak samo na versiyu strukturi 12 04 4 biWidth bV4Width bV5Width LONG Shirina rastra v pikselyah Vkazuyetsya cilim chislom zi znakom Nul i vid yemni ne zadokumentovani 16 08 4 biHeight bV4Height bV5Height LONG Cile chislo zi znakom sho mistit dva parametri visota rastra v pikselyah absolyutne znachennya chisla i poryadok prohodzhennya ryadkiv u dvovimirnih masivah znak chisla Nulove znachennya ne zadokumentovano 1A 0C 2 biPlanes bV4Planes bV5Planes WORD U BMP dopustimo tilki znachennya 1 Ce pole vikoristovuyetsya v znachkah i kursorah Windows 1C 0E 2 biBitCount bV4BitCount bV5BitCount WORD Kilkist bit na piksel 1E 10 4 biCompression bV4V4Compression bV5Compression DWORD Vkazuye na sposib zberigannya pikseliv 22 14 4 biSizeImage bV4SizeImage bV5SizeImage DWORD Rozmir pikselnih danih v bajtah Mozhe buti obnuleno yaksho zberigannya zdijsnyuyetsya dvovimirnim masivom 26 18 4 biXPelsPerMeter bV4XPelsPerMeter bV5XPelsPerMeter LONG Kilkist pikseliv na metr po gorizontali i vertikali 2A 1C 4 biYPelsPerMeter bV4YPelsPerMeter bV5YPelsPerMeter LONG 2E 20 4 biClrUsed bV4ClrUsed bV5ClrUsed DWORD Rozmir tablici koloriv v komirkah 32 24 4 biClrImportant bV4ClrImportant bV5ClrImportant DWORD Kilkist komirok vid pochatku tablici koloriv do ostannoyi vikoristovuvanoyi vklyuchayuchi yiyi samu Dodani u versiyi 4 Poziciya v fajli hex Poziciya v strukturi hex Rozmir bajti Im ya versiiyi 4 5 Tip WinAPI Opis 36 28 4 bV4RedMask bV5RedMask DWORD Bitovi maski dlya viluchennya znachen kanaliv intensivnist chervonogo zelenogo sinogo i znachennya alfa kanalu 3A 2C 4 bV4GreenMask bV5GreenMask DWORD 3E 30 4 bV4BlueMask bV5BlueMask DWORD 42 34 4 bV4AlphaMask bV5AlphaMask DWORD 46 38 4 bV4CSType bV5CSType DWORD Vid kolirnogo prostoru 4A 3C 36 bV4Endpoints bV5Endpoints CIEXYZTRIPLE Znachennya cih chotiroh poliv beretsya do uvagi tilki yaksho pole CSType mistit 0 LCS CALIBRATED RGB Todi kincevi tochki i znachennya gami dlya troh kolirnih komponent vkazuyutsya v cih polyah 6E 60 4 bV4GammaRed bV5GammaRed DWORD 72 64 4 bV4GammaGreen bV5GammaGreen DWORD 76 68 4 bV4GammaBlue bV5GammaBlue DWORD Dodani u versiyi 5 Poziciya v fajli hex Poziciya v strukturi hex Rozmir bajti Im ya Tip WinAPI Opis 7A 6C 4 bV5Intent DWORD Perevagi pri renderingu rastru 7E 70 4 bV5ProfileData DWORD Zsuv u bajtah kolirnogo profilyu vid pochatku BITMAPINFO 82 74 4 bV5ProfileSize DWORD Yaksho v BMP bezposeredno vklyuchayetsya kolirnij profil to tut vkazuyetsya jogo rozmir v bajtah 86 78 4 bV5Reserved DWORD Zarezervovano i povinno buti nulovim Metod stisnennya biCompression 1E mozhe buti Znachennya Identifikovano za Kompresijnij metod Komentari 0 BI RGB zhodnogo Najbilsh poshirenij 1 BI RLE8 RLE 8 bit piksel Mozhna vikoristovuvati lishe z 8 bitovimi pikselnimi rastrovimi zobrazhennyami 2 BI RLE4 RLE 4 bit piksel Mozhna vikoristovuvati lishe z 4 bitovimi pikselnimi rastrovimi zobrazhennyami 3 BI BITFIELDS OS22XBITMAPHEADER Haffman 1D BITMAPV2INFOHEADER bitovi maski polya RGB BITMAPV3INFOHEADER RGBA 4 BI JPEG OS22XBITMAPHEADER RLE 24 BITMAPV4INFOHEADER zobrazhennya JPEG dlya druku 5 BI PNG BITMAPV4INFOHEADER PNG zobrazhennya dlya druku 6 BI ALPHABITFIELDS Maski bitovogo polya RGBA lishe Windows CE 5 0 z NET 4 0 abo novishoyi versiyi 11 BI CMYK zhodnogo tilki metafajl Windows CMYK 12 BI CMYKRLE8 RLE 8 tilki Windows Metafile CMYK 13 BI CMYKRLE4 RLE 4 tilki Windows Metafile CMY Tablicya koloriv Tablicya koloriv palitra mistitsya u fajli zobrazhennya BMP bezposeredno pislya zagolovka fajlu BMP zagolovka DIB i pislya neobov yazkovih troh abo chotiroh bitovih masok yaksho vikoristovuyetsya zagolovok BITMAPINFOHEADER z parametrom BI BITFIELDS 12 bajt abo BI ALPHABITFIELDS 16 bajt Takim chinom jogo zmishennya ye rozmirom BITMAPFILEHEADER plyus rozmir zagolovka DIB plyus neobov yazkovi 12 16 bajt dlya troh abo chotiroh bitovih masok Primitka u Windows CE zagolovok BITMAPINFOHEADER mozhna vikoristovuvati z parametrom BI ALPHABITFIELDS v chleni biCompression Kilkist zapisiv u palitri dorivnyuye abo 2 n de n kilkist bitiv na piksel abo mensha kilkist zaznachena v zagolovku u formati zagolovka OS 2 BITMAPCOREHEADER pidtrimuyetsya lishe povnorozmirna palitra U bilshosti vipadkiv kozhen zapis u tablici koloriv zajmaye 4 bajti v poryadku sinogo zelenogo chervonogo 0x00 viklyuchennya div nizhche Ce indeksuyetsya v BITMAPINFOHEADER v chleni strukturi biBitCount Tablicya koloriv ce blok bajtiv tablicya v yakomu pererahovani kolori yaki vikoristovuyutsya zobrazhennyam Kozhen piksel v indeksovanomu kolorovomu zobrazhenni opisuyetsya kilkistyu bitiv 1 4 abo 8 sho ye indeksom odnogo koloru opisanogo v cij tablici Metoyu kolirnoyi palitri v indeksovanih bitovih zobrazhennyah ye informuvannya programi pro faktichnij kolir yakomu vidpovidaye kozhne z cih znachen indeksu Meta tablici koloriv v neindeksovanih ne paletizovanih rastrovih zobrazhennyah polyagaye v tomu shob pererahuvati kolori yaki vikoristovuyutsya rastrom dlya cilej optimizaciyi na pristroyah z obmezhenimi mozhlivostyami vidobrazhennya koloriv a takozh dlya polegshennya majbutnogo peretvorennya v rizni formati pikseliv i palitri Kolori v tablici koloriv zazvichaj vkazuyutsya u formati RGBA32 iz 4 bajtami na zapis Tablicya koloriv sho vikoristovuyetsya z OS 2 BITMAPCOREHEADER vikoristovuye format RGB24 iz 3 bajtami na zapis Dlya DIB zavantazhenih u pam yat tablicya koloriv mozhe dodatkovo skladatisya z 2 bajtovih zapisiv ci zapisi stanovlyat indeksi do potochnoyi realizovanoyi palitri zamist yavnih viznachen koloru RGB Microsoft ne zaboronyaye nayavnist dijsnoyi bitovoyi maski alfa kanalu v BITMAPV4HEADER i BITMAPV5HEADER dlya indeksovanih kolorovih zobrazhen 1bpp 4bpp i 8bpp sho vkazuye na te sho zapisi tablici koloriv takozh mozhut vkazuvati alfa komponent za dopomogoyu 8 8 8 0 8 0 8 format cherez chlen RGBQUAD rgbReserved Odnak deyaki versiyi dokumentaciyi Microsoft zaboronyayut cyu funkciyu vkazuyuchi sho chlen RGBQUAD rgbReserved povinen buti nulovim Yak zgaduvalosya vishe tablicya koloriv zazvichaj ne vikoristovuyetsya yaksho pikseli mayut format 16 bit na piksel 16 bpp i vishe zazvichaj u cih fajlah rastrovih zobrazhen nemaye zapisiv tablici koloriv Odnak dokumentaciya Microsoft na vebsajti MSDN vid 16 listopada 2010 r viznachaye sho dlya 16bpp i vishe tablicya koloriv mozhe buti prisutnim dlya zberigannya spisku koloriv priznachenih dlya optimizaciyi na pristroyah z obmezhenoyu mozhlivist kolorovogo vidobrazhennya a takozh vkazuye sho v takih vipadkah u cij tablici koloriv nemaye indeksovanih zapisiv palitri Ce mozhe zdatisya protirichchyam yaksho ne robiti riznici mizh obov yazkovimi zapisami palitri ta dodatkovim spiskom koloriv Pam yat pikseliv Biti sho predstavlyayut rastrovi pikseli upakovani v ryadki Rozmir kozhnogo ryadka okruglyuyetsya do kratnogo 4 bajtam 32 bitove DWORD shlyahom zapovnennya Dlya zobrazhen z visotoyu ponad 1 kilka dopovnenih ryadkiv zberigayutsya poslidovno utvoryuyuchi masiv pikseliv Pikselnij masiv rastrovi dani Masiv pikseliv yavlyaye soboyu blok 32 bitovih DWORD yakij opisuye zobrazhennya piksel za pikselem Zazvichaj pikseli zberigayutsya znizu vgoru pochinayuchi z livogo nizhnogo kuta perehodyachi zliva napravo a potim ryad za ryadkom znizu vgoru zobrazhennya Yaksho ne vikoristovuyetsya BITMAPCOREHEADER nestisneni rastrovi zobrazhennya Windows takozh mozhna zberigati zverhu vniz yaksho znachennya visoti zobrazhennya ye negativnim U originalnij OS 2 DIB yedinimi chotirma dopustimimi znachennyami glibini koloru buli 1 4 8 i 24 biti na piksel bpp Suchasni zagolovki DIB dozvolyayut vikoristovuvati pikselni formati z 1 2 4 8 16 24 i 32 bitami na piksel bpp GDI takozh dozvolyaye 64 bita na piksel Bajti zapovnennya ne obov yazkovo 0 mayut buti dodani do kincya ryadkiv shob zbilshiti dovzhinu ryadkiv do chotiroh bajtiv Koli masiv pikseliv zavantazhuyetsya v pam yat kozhen ryadok maye pochinatisya z adresi pam yati kratnoyi 4 Ce obmezhennya adresi zmishennya ye obov yazkovim lishe dlya masiviv pikseliv zavantazhenih u pam yat Dlya cilej zberigannya fajliv lishe rozmir kozhnogo ryadka maye buti kratnim 4 bajtam todi yak zmishennya fajlu mozhe buti dovilnim 24 bitove rastrove zobrazhennya z Width 1 matime 3 bajti danih na ryadok sinij zelenij chervonij i 1 bajt zapovnennya todi yak Width 2 matime 6 bajtiv danih i 2 bajti zapovnennya Width 3 matime 9 bajtiv danih i 3 bajti zapovnennya a Width 4 matime 12 bajtiv danih bez zapovnennya Stisnennya Indeksovani kolorovi zobrazhennya mozhut buti stisnuti za dopomogoyu 4 rozryadnogo abo 8 bitovogo algoritmu RLE abo Haffmana 1D Zobrazhennya OS 2 BITMAPCOREHEADER 2 24bpp mozhut buti stisnuti za dopomogoyu 24 bitnogo algoritmu RLE Zobrazhennya 16bpp i 32bpp zavzhdi zberigayutsya bez stisnennya Zauvazhte sho zobrazhennya bud yakoyi glibini koloru mozhna zberigati bez stisnennya yaksho ce potribno Pikselnij format Format 1 bit na piksel 1 bpp pidtrimuye 2 rizni kolori napriklad chornij i bilij Znachennya pikseliv zberigayutsya v kozhnomu biti prichomu pershij krajnij livij piksel u samomu znachushomu biti pershogo bajta Kozhen bit ye indeksom u tablicyu z 2 koloriv Nevstanovlenij bit bude posilatisya na pershij zapis tablici koloriv a vstanovlenij bit do ostannogo drugogo zapisu tablici koloriv Format 2 bit na piksel 2bpp pidtrimuye 4 rizni kolori i zberigaye 4 pikseli na 1 bajt krajnij livij piksel znahoditsya v dvoh najbilsh znachushih bitah lishe dlya Windows CE Kozhne znachennya pikselya ye 2 bitovim indeksom u tablici do 4 koloriv Format 4 bit na piksel 4bpp pidtrimuye 16 riznih koloriv i zberigaye 2 pikseli na 1 bajt prichomu krajnij livij piksel znahoditsya u bilsh znachnomu fragmenti Kozhne znachennya pikselya ye 4 bitovim indeksom u tablici do 16 koloriv Format 8 bit na piksel 8 bpp pidtrimuye 256 riznih koloriv i zberigaye 1 piksel na 1 bajt Kozhen bajt ye indeksom u tablicyu do 256 koloriv Format 16 bit na piksel 16 bpp pidtrimuye 65536 riznih koloriv i zberigaye 1 piksel na 2 bajtove WORD Kozhne SLOVO mozhe viznachati alfa chervonij zelenij ta sinij vibirki pikselya Format 24 bitnogo pikselya 24 bpp pidtrimuye 16 777 216 riznih koloriv i zberigaye znachennya 1 pikselya na 3 bajti Kozhne znachennya pikselya viznachaye chervoni zeleni ta sini zrazki pikselya 8 8 8 0 0 u notaciyi RGBAX Zokrema v poryadku sinij zelenij i chervonij 8 bit na kozhnu vibirku Format 32 bit na piksel 32bpp pidtrimuye 4 294 967 296 riznih koloriv i zberigaye 1 piksel na 4 bajtovij DWORD Kozhne DWORD mozhe viznachiti alfa chervonij zelenij ta sinij vibirki pikselya Shob virishiti neodnoznachnist togo yaki biti viznachayut yaki vibirki zagolovki DIB nadayut pevni znachennya za zamovchuvannyam a takozh konkretni BITFIELDS yaki ye bitovimi maskami yaki viznachayut nalezhnist pevnoyi grupi bitiv u pikseli do pevnogo kanalu Navedena nizhche diagrama viznachaye cej mehanizm Priklad 1 Zvernit uvagu sho rastrovi dani pochinayutsya z nizhnogo livogo kuta zobrazhennya Nizhche navedeno priklad rastrovogo zobrazhennya 2 2 pikselya 24 rozryadnogo zagolovok Windows DIB BITMAPINFOHEADER z pikselnij format RGB24 Zmishennya Rozmir Shistnadcyatkove znachennya Znachennya Opis Zagolovok BMP 0h 2 42 4D BM Pole identifikatora 42h 4h 2h 4 46 00 00 00 70 bajt 54 16 Rozmir fajlu BMP zagolovok 54 bajti 16 bajt danih 6h 2 00 00 Nevikoristanij Specifichne zastosuvannya 8h 2 00 00 Nevikoristanij Specifichne zastosuvannya Ah 4 36 00 00 00 54 bajti 14 40 Zmishennya de mozhna znajti masiv pikseliv rastrovi dani Zagolovok DIB Eh 4 28 00 00 00 40 bajt Kilkist bajtiv u zagolovku DIB z cogo momentu 12h 4 02 00 00 00 2 pikseli poryadok zliva napravo Shirina rastrovogo zobrazhennya v pikselyah 16h 4 02 00 00 00 2 pikseli znizu vgoru Visota rastrovogo zobrazhennya v pikselyah Pozitivnij dlya poryadku pikseliv znizu vgoru 1Ah 2 01 00 1 ploshina Kilkist kolorovih ploshin sho vikoristovuyutsya 1Ch 2 18 00 24 biti Kilkist bitiv na piksel 1Eh 4 00 00 00 00 0 BI RGB stisnennya masivu pikseliv ne vikoristovuyetsya 22h 4 10 00 00 00 16 bajt Rozmir neobroblenih rastrovih danih vklyuchayuchi zapovnennya 26h 4 13 0B 00 00 2835 pikseliv metr po gorizontali Rozdilna zdatnist druku zobrazhennya 72 DPI 39 3701 dyujma na metr daye 2834 6472 2Ah 4 13 0B 00 00 2835 pikseliv metr po vertikali 2Eh 4 00 00 00 00 0 koloriv Kilkist koloriv u palitri 32h 4 00 00 00 00 0 vazhlivih koloriv 0 oznachaye sho vsi kolori vazhlivi Pochatok masivu pikseliv rastrovi dani 36h 3 00 00 FF 0 0 255 Chervonij piksel 0 1 39h 3 FF FF FF 255 255 255 Bilij piksel 1 1 3Ch 2 00 00 0 0 Zapovnennya dlya 4 bajtovogo virivnyuvannya mozhe buti znachennyam vidminnim vid nulya 3Eh 3 FF 00 00 255 0 0 sinij piksel 0 0 41h 3 00 FF 00 0 255 0 Zelenij piksel 1 0 44h 2 00 00 0 0 Zapovnennya dlya 4 bajtovogo virivnyuvannya mozhe buti znachennyam vidminnim vid nulya Priklad 2 rastrovogo zobrazhennya 4 2 pikselya z koduvannyam 32 biti piksel Priklad 2 Zvernit uvagu sho rastrovi dani pochinayutsya z nizhnogo livogo kuta zobrazhennya Nizhche navedeno priklad 32 rozryadnogo rastrovogo zobrazhennya rozmirom 4 2 pikselya zi znachennyami neprozorosti v alfa kanali zagolovok Windows DIB BITMAPV4HEADER z pikselnim formatom ARGB32 Zmishennya Rozmir Shistnadcyatkove znachennya Znachennya Opis Zagolovok BMP 0h 2 42 4D BM Pole identifikatora 42h 4Dh 2h 4 9A 00 00 00 154 bajti 122 32 Rozmir fajlu BMP 6h 2 00 00 Nevikoristanij Specifichne zastosuvannya 8h 2 00 00 Nevikoristanij Specifichne zastosuvannya Ah 4 7A 00 00 00 122 bajti 14 108 Zmishennya de mozhna znajti masiv pikseliv rastrovi dani Zagolovok DIB Eh 4 6C 00 00 00 108 bajt Kilkist bajtiv u zagolovku DIB z cogo momentu 12h 4 04 00 00 00 4 pikseli poryadok zliva napravo Shirina rastrovogo zobrazhennya v pikselyah 16h 4 02 00 00 00 2 pikseli znizu vgoru Visota rastrovogo zobrazhennya v pikselyah 1Ah 2 01 00 1 ploshina Kilkist kolorovih ploshin sho vikoristovuyutsya 1Ch 2 20 00 32 biti Kilkist bitiv na piksel 1Eh 4 03 00 00 00 3 BI BITFIELDS stisnennya masivu pikseliv ne vikoristovuyetsya 22h 4 20 00 00 00 32 bajti Rozmir neobroblenih rastrovih danih vklyuchayuchi zapovnennya 26h 4 13 0B 00 00 2835 pikseliv metr po gorizontali Rozdilna zdatnist druku zobrazhennya 72 DPI 39 3701 dyujma na metr daye 2834 6472 2Ah 4 13 0B 00 00 2835 pikseliv metr po vertikali 2Eh 4 00 00 00 00 0 koloriv Kilkist koloriv u palitri 32h 4 00 00 00 00 0 vazhlivih koloriv 0 oznachaye sho vsi kolori vazhlivi 36h 4 00 00 FF 00 00FF0000 u velikomu bajti Chervona bitova maska kanalu dijsna oskilki vkazano BI BITFIELDS 3Ah 4 00 FF 00 00 0000FF00 u velikomu ryadku Zelena bitova maska kanalu dijsna oskilki vkazano BI BITFIELDS 3Eh 4 FF 00 00 00 000000FF u velikomu bajti Blakitna maska kanalu dijsna oskilki vkazano BI BITFIELDS 42h 4 00 00 00 FF FF000000 u velikomu bajti bitova maska alfa kanalu 46h 4 20 6E 69 57 malenkij ryadok Win LCS WINDOWS COLOR SPACE 4Ah 24 god 24 godini 00 00 Kincevi tochki kolirnogo prostoru CIEXYZTRIPLE Ne vikoristovuyetsya dlya LCS Win abo sRGB 6Eh 4 00 00 00 00 0 Chervona Gama Ne vikoristovuyetsya dlya LCS Win abo sRGB 72h 4 00 00 00 00 0 Zelena Gama Ne vikoristovuyetsya dlya LCS Win abo sRGB 76h 4 00 00 00 00 0 Sinya gamma Ne vikoristovuyetsya dlya LCS Win abo sRGB Pochatok masivu pikseliv rastrovih danih 7Ah 4 FF 00 00 7F 255 0 0 127 Sinij alfa 127 piksel 1 0 7Eh 4 00 FF 00 7F 0 255 0 127 Zelenij alfa 127 piksel 1 1 82h 4 00 00 FF 7F 0 0 255 127 Chervonij alfa 127 piksel 1 2 86h 4 FF FF FF 7F 255 255 255 127 Bilij alfa 127 piksel 1 3 8Ah 4 FF 00 00 FF 255 0 0 255 Sinij alfa 255 piksel 0 0 8Eh 4 00 FF 00 FF 0 255 0 255 Zelenij alfa 255 piksel 0 1 92h 4 00 00 FF FF 0 0 255 255 Chervonij alfa 255 piksel 0 2 96h 4 FF FF FF FF 255 255 255 255 Bilij alfa 255 piksel 0 3 Primitki Shablon Cite IETF makelink IANA Considerations Shablon Cite IETF makelink Windows Image Media Types sec 5 doi 10 17487 RFC7903 Pachghare V K 2005 12 angl Laxmi Publications ISBN 978 81 7008 185 2 Arhiv originalu za 30 listopada 2021 Procitovano 30 listopada 2021 Master Bundles amer 5 zhovtnya 2021 Arhiv originalu za 30 listopada 2021 Procitovano 30 listopada 2021 paulbourke net Arhiv originalu za 11 kvitnya 2022 Procitovano 30 listopada 2021 www file extensions org angl Arhiv originalu za 30 listopada 2021 Procitovano 30 listopada 2021 Informaciya pro versiyi vzyata z dovidki po Microsoft Windows SDK jde v komplekti z Microsoft Visual Studio 2008 i Embarcadero RAD Studio 2010 rozdil Requirements v stattyah pro dani strukturi Div rozdili Requirements v stattyah BITMAPCOREHEADER 16 veresnya 2014 u Wayback Machine i BITMAPINFOHEADER 19 kvitnya 2014 u Wayback Machine stosovno doWindows Mobile 6 5 na MSDN