dwBBitMask 31 0000000000011111

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

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

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

Поле Значение Двоичное значение Стартовый бит Количество бит
dwRBitMask 63488 1111100000000000 11 5
dwGBitMask 2016 0000011111100000 5 6
dwBBitMask 31 0000000000011111 0 5

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

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

Поле Значение Двоичное значение Стартовый бит Количество бит
dwRBitMask 16711680 111111110000000000000000 16 8
dwGBitMask 65280 000000001111111110000000 8 8
dwBBitMask 255 000000000000000011111111 0 8

Помните — данные в этих таблицах относятся к конкретной аппаратуре. Они представлены лишь для примера того, как могут выглядеть такие данные, а не как исчерпывающее руководство по форматам пикселей.

Переменные формата пикселей в классе DirectDrawWin

При описании класса DirectDrawWin в главе 3 мы видели, что функция DirectDrawWin::ActivateDisplayMode() после активизации нового видеорежима, но до создания вспомогательных поверхностей приложения, вызывает функцию StorePixelFormatData(). Описание этой функции было отложено до настоящего момента.

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

BOOL DirectDrawWin::StorePixelFormatData() {

 DDPIXELFORMAT format;

 ZeroMemory(&format, sizeof(format));

 format.dwSize=sizeof(format);

 if (primsurf->GetPixelFormat(&format)!=DD_OK) {

  TRACE('StorePixelFormatData() failed ');

  return FALSE;

 }

 loREDbit = LowBitPos(format.dwRBitMask);

 WORD hiREDbit = HighBitPos(format.dwRBitMask);

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату