Що таке файл DIB?
Незалежне від апарату растрове зображення (DIB) — це файл растрового зображення, подібний за структурою до стандартних файлів растрового зображення (BMP/image/bmp/)). Він містить таблицю кольорів, яка описує відображення кольорів RGB на значення пікселів. Це дозволяє DIB представляти зображення на будь-якому пристрої. Його можна відкрити майже за допомогою всіх програм, які можуть відкрити стандартний файл BMP у Windows, а також у macOS. DIB є двійковими файлами та мають складний формат файлів, подібний до BMP. Зображення DIB не залежать від вихідних можливостей пристроїв візуалізації з точки зору глибини кольору та пікселів на дюйм.
Специфікації формату файлу DIB
DIB містить таку інформацію про колір і розміри:
- Формат кольору пристрою, на якому було створено прямокутне зображення.
- Роздільна здатність пристрою, на якому було створено прямокутне зображення.
- Палітра для пристрою, на якому було створено зображення.
- Масив бітів, який відображає триплети червоного, зеленого, синього (RGB) пікселів у прямокутному зображенні.
- Ідентифікатор стиснення даних, який вказує на схему стиснення даних (за наявності), яка використовується для зменшення розміру масиву бітів.
Формат блоку даних DIB
DIB постає в контексті блоку пам’яті порівняно з файлами .DIB, що зберігаються на диску. Блок пам’яті складається зі структури, яка відповідає специфікаціям Windows API для DIB. Фактично DIB складається з:
- Заголовок
- Палітра кольорів
- Піксельні дані
Практично робота з палітрою, заголовком і даними зображення виконується так, ніби це три окремі блоки пам’яті. Дескриптор цього загального блоку пам’яті призначається за допомогою GlobalAlloc і відомий як HDIB, який використовується для вилучення та роботи з заголовком, таблицею кольорів і піксельними даними.
Структури
Інформація, що міститься в DIB, представлена різними структурами. До них належать:
BITMAPInfo – визначає інформацію про розмір і колір для DIB
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, *LPBITMAPINFO, *PBITMAPINFO;
Він складається з BITMAPINFOHEADER:
typedef struct tagBITMAPINFOHEADER {
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
за якими йдуть дві або більше структур RGBQAD.
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
Біти даних
Біти | Опис |
---|---|
1-bit format (monochrome) | Монохромні растрові зображення складаються з двох кольорів (чорного та білого). Через обмежену кількість кольорів ці растрові зображення займають менше місця на диску. BitBitCount повертає true або false для представлення обох кольорів. Більшість додатків повністю пропускають палітру, якщо bitBitCount==1. |
4-бітний формат (VGA або 16 кольорів) | Кожен байт даних зображення представляє два пікселі та bitBitCount==4. Ці біти представляють колір пікселя в порядку спадання. |
8-бітний формат (256 кольорів) | Цей 8-бітний формат може представляти максимум 256 кольорів. Кожен байт у масиві растрових даних зображення представляє один піксель. Значення цього байта — це номер запису палітри кольорів, який буде використано з 256 записів, представлених bmciColors. |
24-бітний формат (TrueColor) | Ці растрові зображення можуть мати максимум 2^24 кольори (biBitCount == 24). Кожна трибайтова послідовність у масиві даних растрового зображення представляє відносну інтенсивність трьох основних відтінків пікселя. Відтінки описуються як значення в діапазоні від 0 до 255 і зберігаються в трьох байтах у порядку синій, зелений і червоний. Це важлива відмінність, оскільки більшість посилань на кольори у Windows використовують протилежний порядок: червоний/зелений/синій, тому під час роботи із зображеннями TrueColor вважайте «BGR» замість «RGB». Можна вказати палітру кольорів, щоб прискорити процес малювання для Windows, і в цьому випадку biClrUsed не дорівнюватиме 0. Але, як бачите, це не потрібно, оскільки самі піксельні дані містять інформацію про колір. |
32-бітний формат | 32-бітні зображення мають максимум 2^24 кольори (biBitCount == 24). |