Программирование игр для Windows. Советы профессионала


Переопределение цветовой палитры - часть 2


Вы можете спросить: «А как мы прочитаем из одного порта три байта?» На самом деле вы можете прочитать их по очереди. После того как вы выберете необходимый регистр (значение таблицы цветов, к которому вам нужен доступ), то первый записанный в регистр палитры байт будет соответствовать значению красного цвета. Второй байт задаст значение зеленого цвета, ну а третий — синего. Когда вы будете читать, это правило будет так же верно, но. в отличие от записи трех байтов в каждый момент чтения вы будете получать следующий компонент считываемого значения выбранного регистра. Для записи в регистр палитры вы должны:             

§          Выбрать регистр, который хотите изменить;

§          Произвести три записи в порт регистра данных.

Когда вы читаете или пишете в регистр цвета, не забывайте каждый раз предварительно изменять значение маски на OxFF. Листинг 5.1 показывает код, содержащий эти шаги.

Листинг 5.1. Запись в регистр палитры.

void Set_Palette_Register(int index, RGB_color_ptr color)

{

// эта функция устанавливает один из элементов таблицы цветов.

// номер регистра задается параметром index, цвет - структурой color

// указываем, что мы будем обновлять регистр палитры

_outp(PALETTE_MASK,Oxff) ;

// какой из регистров мы хотим обновить

_outp(PALETTE_REGISTER_WR, index);

// теперь обновляем RGB. Обратите внимание,

// что каждый раз используется один и тот же порт

_outp(PALETTE_DATA,color->red) ;

_outp(PALETTE_DATA,color->green) ;

_outp(PALETTE_DATA,color->blue) ;

} // конец функции

Помните, что я использую структуру данных RGB_color. Это структура с тремя полями, каждое из которых предназначено для определенного цвета. Она выглядит так:

typedef struct RGB_color_typ

{

unsigned char red;    // красный

компонент

0-63

unsigned char green; // зеленый

компонент

0-63

unsigned char blue;   // синий

компонент

0-63

} RGB_color, *RGB_color_ptr;

Все походит на то, что следующей операцией должно стать чтение из регистра.


Начало  Назад  Вперед



Книжный магазин