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

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


Сведения о формате пикселей поверхности можно получить функцией 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-битных пикселей


ПолеЗначениеДвоичное значение
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
Помните - данные в этих таблицах относятся к конкретной аппаратуре. Они представлены лишь для примера того, как могут выглядеть такие данные, а не как исчерпывающее руководство по форматам пикселей.




Содержание раздела