Для будущей работы с изображениями нам потребуется палитра цветов. До сих пор мы на экран выводили просто номера цветов. Но сам номер цвета без своих основных параметров не несет в себе полезной информации. Поэтому давайте введем массив для палитры.
class CGIScreen{ ... unsigned char Palette[768]; ... };
Сегодня редко требуется цветов для графики больше 256, не считая конечно фотографии. Практически весь Web пытается обходиться 32-64 цветами. Кроме того основные распространенные палитровые форматы графических изображений, такие как GIF, BMP не могут содержать в себе больше 256 цветов. Поэтому размер палитры равен 256*3, где число три - это количество основных составляющих цвета: красный, зеленый и синий. В мире принят формат хранения цветов в формате RGB, т.е. сначала красный, потом зеленый и синий. Мы будем использовать тот же формат, потому что вероятнее всего в будущем он поможет избавиться от преобразования формата палитры.
Для установки цветов палитры создадим следующую процедуру:
void CGIScreen::SetPalette(unsigned char Color,unsigned char Red, unsigned char Green,unsigned char Blue){ Palette[Color*3]=Red; Palette[Color*3+1]=Green; Palette[Color*3+2]=Blue; };
Здесь Color - это номер цвета в палитре, а Red, Green, Blue - соответствующие составляющие цвета.
Для облегчения работы с палитрой также нужна функция, которая будет получать цвет из палитры:
void CGIScreen::GetPalette(unsigned char Color,unsigned char *Red, unsigned char *Green,unsigned char *Blue){ *Red=Palette[Color*3]; *Green=Palette[Color*3+1]; *Blue=Palette[Color*3+2]; };
Теперь давайте договоримся всегда перед рисованием сначала инициализировать соответствующий цвет в палитре. И старайтесь, чтобы все используемые цвета шли последовательно и их использовалось как можно меньше.