Графика для Windows средствами DirectDraw | страница 96



Рис. 5.6. Типичные форматы пикселей True Color


Получение данных о формате пикселей  

Сведения о формате пикселей поверхности можно получить функцией GetPixelFormat() интерфейса DirectDrawSurface, в которой для передачи данных используется структура DDPIXELFORMAT. Функция GetPixelFormat() применяется так:

>DDPIXELFORMAT format;

>ZeroMemory(&format, sizeof(format));

>format.dwSize=sizeof(format);

>surf->GetPixelFormat(&format);

Структура DDPIXELFORMAT содержит четыре поля, представляющих для нас интерес:

• dwRGBBitCount

• dwRBitMask

• dwGBitMask

• dwBBitMask

Поле dwRGBBitCount показывает глубину пикселей поверхности. Три оставшихся поля являются масками, определяющими, в каких битах пикселя хранятся данные красной, зеленой и синей составляющих. Например, типичные значения полей для поверхности High Color формата 5-6-5 приведены в табл. 5.1.

Три маски показывают, в каких позициях пикселя хранятся данные отдельных цветовых составляющих. С помощью этих масок можно корректно читать и записывать данные пикселя независимо от его формата.


 Таблица 5.1. Типичные данные формата для 16-битных пикселей

ПолеЗначениеДвоичное значение
dwRGBBitCount16(неважно)
dwRBitMask634881111100000000000
dwGBitMask20160000011111100000
dwBBitMask310000000000011111

В приведенном ниже коде маски используются для вычисления двух величин: начальной позиции каждой цветовой составляющей внутри пикселя (бит, с которого начинается составляющая, или стартовый бит), и количества бит для представления каждой цветовой составляющей. Значения этих величин приведены в табл. 5.2. Обратите внимание на то, что стартовый бит отсчитывается справа налево (старшие биты в двоичных величинах находятся слева).

Рассчитанные значения облегчают операции с пикселями. Стартовый бит показывает, на сколько позиций сдвигаются данные цветовой составляющей, а количество — сколько бит занимает составляющая в двоичной величине.


Таблица 5.2. Типичные данные формата для 16-битных пикселей

ПолеЗначениеДвоичное значениеСтартовый битКоличество бит
dwRBitMask634881111100000000000115
dwGBitMask2016000001111110000056
dwBBitMask31000000000001111105

Однако до сих пор мы рассматривали лишь 16-битные пиксели. 8-битные пиксели нас не интересуют, но перед тем, как идти дальше, необходимо уделить внимание пикселям формата True Color. В табл. 5.3 приведены данные формата пикселей (в том числе две вычисленные величины для каждой цветовой составляющей) для типичного 24-битного формата.