.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;
Он состоит из BITMAPINFHEADER:
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-битный формат (монохромный) | Монохромные растровые изображения состоят из двух цветов (черного и белого). Из-за ограниченного количества цветов эти растровые изображения занимают меньше места на диске. 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). |