Типы заголовков растрового рисунка
Растровое изображение имеет четыре основных типа заголовков:
Четыре типа заголовков растрового изображения различаются элементом Size , который является первым DWORD в каждой из структур.
Структура BITMAPV5HEADER — это расширенная BITMAPV4HEADER структура, которая является расширенной структурой BITMAPINFOHEADER. Однако BITMAPINFOHEADER и BITMAPCOREHEADER имеют только элемент Size в общем с другими структурами заголовков растрового изображения.
Форматы BITMAPCOREHEADER и BITMAPV4HEADER заменены BITMAPINFOHEADER и BITMAPV5HEADER форматами соответственно. Форматы BITMAPCOREHEADER и BITMAPV4HEADER представлены для полноты и обратной совместимости.
Формат DIB приведен ниже (дополнительные сведения см. в разделе "Хранилище растровых карт").
- Структура BITMAPFILEHEADER
- ЛИБО BITMAPCOREHEADER, BITMAPINFOHEADER, BITMAPV4HEADER, либо структура BITMAPV5HEADER.
- необязательная цветовая таблица, которая представляет собой набор структур RGBQUAD или набор структур RGBTRIPLE.
- данные растрового изображения
- необязательные данные профиля
Таблица цветов описывает, как значения пикселей соответствуют значениям цвета RGB. RGB — это модель для описания цветов, создаваемых путем создания света.
Данные профиля ссылаются на имя файла профиля (связанный профиль) или фактические биты профиля (внедренный профиль). Формат файла помещает данные профиля в конец файла. Данные профиля помещаются сразу после цветной таблицы (если они присутствуют). Однако если функция получает упакованный DIB, данные профиля поступают после битов растрового изображения, как в формате файла.
Данные профиля будут существовать только для структур BITMAPV5HEADER, где bV5CSType PROFILE_LINKED или PROFILE_EMBEDDED. Для функций, получающих упакованные DIOB-объекты, данные профиля поступают после данных растрового изображения.
Палеттизированное устройство — это любое устройство, использующее палитры для назначения цветов. Классический пример палеттизированного устройства — это дисплей, работающий в 8 битовой глубине цвета (т. е. 256 цветов). Отображение в этом режиме использует небольшую таблицу цветов для назначения цветов растровым рисункам. Цвета растрового изображения назначаются ближайшему цвету в палитре, используемой устройством. Палеттизированное устройство не создает оптимальную палитру для отображения растрового изображения; он просто использует все, что находится в текущей палитре. Приложения отвечают за создание палитры и выбор ее в систему. Как правило, 16-, 24-и 32-разрядные растровые изображения (bpp) не содержат таблицы цветов (a.k.a. оптимальные палитры для растрового изображения); Приложение отвечает за создание оптимальной палитры в данном случае. Однако 16-, 24-и 32-bpp-растровые карты могут содержать такие оптимальные цветовые таблицы для отображения на палетизированных устройствах; В этом случае приложению просто нужно создать палитру на основе таблицы цветов, присутствующих в файле растрового изображения.
Растровые изображения, 1, 4 или 8 bpp должны иметь цветовую таблицу с максимальным размером на основе bpp. Максимальный размер для 1, 4 и 8 битовых изображений bpp составляет 2 к мощности bpp. Таким образом, 1 битовое изображение bpp имеет не более двух цветов, 4 bpp bitmap имеет не более 16 цветов, а 8 bpp bitmap имеет не более 256 цветов.
Растровые карты, которые имеют 16-, 24-или 32-bpp, не требуют цветовых таблиц, но могут иметь их, чтобы указать цвета для палеттизированных устройств. Если таблица цветов присутствует для 16-, 24-или 32-bpp-растрового изображения, элемент biClrUsed указывает размер таблицы цветов и таблицу цветов должен иметь в нем много цветов. Если значение biClrUsed равно нулю, таблица цветов отсутствует.
Красные, зеленые и синие битовые маски для BI_BITFIELD растровых изображений немедленно следуют за структурами BITMAPINFOHEADER, BITMAPV4HEADER и BITMAPV5HEADER. Структуры BITMAPV4HEADER и BITMAPV5HEADER содержат дополнительные элементы для красных, зеленых и синих маск, как показано ниже.
Элемент | Значение |
---|---|
RedMask | Маска цвета, указывающая красный компонент каждого пикселя, допустимая только в том случае, если для элемента сжатия задано значение BI_BITFIELDS. |
GreenMask | Маска цвета, указывающая зеленый компонент каждого пикселя, допустим только в том случае, если для элемента сжатия задано значение BI_BITFIELDS. |
BlueMask | Маска цвета, указывающая синий компонент каждого пикселя, допустим только в том случае, если для элемента сжатия задано значение BI_BITFIELDS. |
Если для элемента biCompression BITMAPINFOHEADER задано значение BI_BITFIELDS, а функция получает аргумент типа LPBITMAPINFO, то маски цветов сразу же следуют за заголовком. Таблица цветов, если она присутствует, будет соответствовать маскам цвета. Растровые изображения BITMAPCOREHEADER не поддерживают маски цветов.
По умолчанию данные растрового рисунка находятся в нижнем углу в своем формате. Внизу означает, что первая строка сканирования в данных растрового изображения является последней строкой сканирования, которую нужно отобразить. Например, 0-й пиксель линии сканирования 0-го растрового изображения данных 10-пикселей на 10 пикселей будет 0-й пиксель 9-й линии сканирования отображаемого или печатного изображения. Растровые изображения в кодировке run-length (RLE) и растровые карты BITMAPCOREHEADER не могут быть растровыми изображениями сверху вниз. Линии сканирования выровнены по протоколу DWORD , за исключением растровых изображений, сжатых на языке RLE. Они должны быть заполнены для ширины линии сканирования в байтах, которые не равномерно разделены на четыре, за исключением сжатых растровых изображений RLE. Например, 10-к 10-пиксельное 24-bpp-растровое изображение будет иметь два байта с заполнением в конце каждой строки сканирования.