Что такое палитры?

"Теория DirectDraw"

<Уголок DirectX>


Для правильного отображения цветов, палетизированная поверхность должна иметь свою палитру. Палетизированая поверхность также называется поверхность с индексированными цветами. На самом деле такая поверхность представляет собой набор чисел, каждое из которых представляет собой пиксел. Значение каждого числа говорит DirectDraw, какой по счету член палитры использовать при отображении этого пиксела. Использование палитр позволяет очень гибко обращаться с набором цветов, которым оперирует программа. Каждый цвет палитры обычно задется в 16-битном или более высоком формате RGB.

Объект DirectDrawPalette на самом деле представляет собой массив из 2, 4,16 или 256 членов, который называют индексированной цветовой таблицей. Каждый член массива является RGB триплетом, который задает реальный цвет, который будет использоваться для отображения пиксела. Цветовая таблица может содержать 16 или 24 - битные RGB триплеты. Для 16-цветовых таблиц один элемент может содержать индекс в другой 256-цветовой таблице. Палитры поддерживаются для текстур, оффскринных поверхностей и оверлеев. Совсем необязательно, чтобы все эти поверхности имели ту же палитру, что и главная поверхность.

Палиры создаеются с помощью метода DirectDraw7.CreatePalette. Созданный объект палитры (DirectDrawPalette) затем может использоваться в методах работы с поверхностями. Заметьте разницу. В работе с поверхностями используется объект палитры, а не массивы с определениями цветов!

Палитра может быть назначена поверхности методом DirectDrawSurface7.SetPalette. Одна палитра может использоваться во множестве поверхностей. Объект DirectDrawPalette резервирует элемент 0 и 255 для 8-ми битных палитр. Обычно это цвета белый и черный. (255,255,255 и 0,0,0). Однако вы можете сами определить эти элементы указав флаг DDPCAPS_ALLOW256.

Палитру можно создать как программно, так и вручную, самому прописав все цвета или с помощью специальной программы, которую совсем не сложно сделать самому.

В этом примере показано, как сделать программно GREYSCALE палитру:

Dim CTable(255) as PALETTEENTRY
Dim I as Integer
For I=0 to 255
CTable(I).Red=I
CTable(I).Green=I
CTable(I).Blue=I
Next I

Еще один интересный способ создания палитры - готовый растровый 16(24)-битный рисунок с переходом цвета. Вы получаете с помощью DirectDraw прямой доступ к видеопамяти, "снимаете" каждый пиксел и заполняете таблицу.


>>> Реклама <<<