Получение данных о формате пикселей
Сведения о формате пикселей поверхности можно получить функцией GetPixelFormat() интерфейса DirectDrawSurface, в которой для передачи данных используется структура DDPIXELFORMAT. Функция GetPixelFormat() применяется так:
DDPIXELFORMAT format; ZeroMemory( &format, sizeof(format) ); format.dwSize=sizeof(format); surf->GetPixelFormat( &format ); |
Структура DDPIXELFORMAT содержит четыре поля, представляющих для нас интерес:
Поле dwRGBBitCount показывает глубину пикселей поверхности. Три оставшихся поля являются масками, определяющими, в каких битах пикселя хранятся данные красной, зеленой и синей составляющих. Например, типичные значения полей для поверхности High Color формата 5-6-5 приведены в табл. 5.1.
Три маски показывают, в каких позициях пикселя хранятся данные отдельных цветовых составляющих. С помощью этих масок можно корректно читать и записывать данные пикселя независимо от его формата.
Таблица 5.1. Типичные данные формата для 16-битных пикселей
Поле | Значение | Двоичное значение |
dwRGBBitCount dwRBitMask dwGBitMask dwBBitMask |
16 63488 2016 31 |
(неважно) 1111100000000000 0000011111100000 0000000000011111 |
В приведенном ниже коде маски используются для вычисления двух величин: начальной позиции каждой цветовой составляющей внутри пикселя (бит, с которого начинается составляющая, или стартовый бит), и количества бит для представления каждой цветовой составляющей. Значения этих величин приведены в табл. 5.2. Обратите внимание на то, что стартовый бит отсчитывается справа налево (старшие биты в двоичных величинах находятся слева).
Рассчитанные значения облегчают операции с пикселями. Стартовый бит показывает, на сколько позиций сдвигаются данные цветовой составляющей, а количество — сколько бит занимает составляющая в двоичной величине.
Таблица 5.2. Типичные данные формата для 16-битных пикселей
Поле | Значение | Двоичное значение | Стартовый бит | Количество бит |
dwRBitMask dwGBitMask dwBBitMask |
63488 2016 31 |
1111100000000000 0000011111100000 0000000000011111 |
11 5 0 |
5 6 5 |
br>
Однако до сих пор мы рассматривали лишь 16-битные пиксели. 8-битные пиксели нас не интересуют, но перед тем, как идти дальше, необходимо уделить внимание пикселям формата True Color. В табл. 5.3 приведены данные формата пикселей (в том числе две вычисленные величины для каждой цветовой составляющей) для типичного 24-битного формата.
Таблица 5.3. Типичные данные формата для 24-битных пикселей
Поле | Значение | Двоичное значение | Стартовый бит | Количество бит |
dwRBitMask dwGBitMask dwBBitMask |
16711680 65280 255 |
111111110000000000000000 000000001111111110000000 000000000000000011111111 |
16 8 0 |
8 8 8 |