Шаг 20 - Внутренняя палитра

Для будущей работы с изображениями нам потребуется палитра цветов. До сих пор мы на экран выводили просто номера цветов. Но сам номер цвета без своих основных параметров не несет в себе полезной информации. Поэтому давайте введем массив для палитры.

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];
};

Теперь давайте договоримся всегда перед рисованием сначала инициализировать соответствующий цвет в палитре. И старайтесь, чтобы все используемые цвета шли последовательно и их использовалось как можно меньше.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Кузин Андрей.