// установка выравнивания текста: горизонталь - по центру, вертикаль - по базовой линии
dc.SetTextAlign ( TA_CENTER | TA_BASELINE );
dc.TextOut ( L/2 , 15 , Title ); // рисование заголовка в центре окна
CRect TextRec; // параметры текстовой области
// вычисление параметров текстовой области
TextRec.top = H / 4 ; TextRec.left = L / 4 ;
TextRec.bottom = 3 * H / 4 ; TextRec.right = 3 * L / 4 ;
dc.SetBkColor ( crWhite ) ; // установка цвета фона
dc.SetTextColor ( crRed ) ; // установка цвета текста
dc.ExtTextOut ( L / 2 , H / 2 , ETO_OPAQUE | ETO_CLIPPED , &TextRec , Text , NULL ) ;
}
В зрительной системе человека существуют три типа цветовых рецепторов — колбочек. Каждый тип имеет свою зависимость чувствительности от длины световой волны. Максимумы этих кривых чувствительности располагаются в области красного, зелёного и синего цветов. Таким образом, мозг получает информацию о цвете в виде набора трёх сигналов, а не в виде непрерывной функции.
Подводя итог сказанному, получим основополагающий принцип трехкомпонентной теории цветовосприятия: если два цвета характеризуются одним и тем же набором первичных составляющих, они визуально неразличимы.
Прямым следствием принципа трехкомпонентной теории цветовосприятия является возможность сформировать любой цвет как сумму первичных компонентов: красного (Red), зелёного (Green) и голубого (Blue). Цветовое соответствие при этом выражается соотношением
C = T1 R + T2 G + T3 B
В современных графических API стало возможным обеспечить правильную цветопередачу, причем аппаратно удается использовать алгоритмы аппроксимации, позволяющие достаточно приблизиться к полноценной RGB-модели отображения.
Концептуально в RGB-системе наложения цветов должны существовать три раздельных буфера кадра — по одному на каждый из первичных цветов. В каждом буфере за определенным пикселем на экране закреплен фиксированный адрес в памяти. В типовой системе, имеющей разрешение 1280╳1024 пикселей, каждый из них описывается тремя байтами (24 битами): по одному байту соответственно для красного, зеленого и синего цвета. В результате буфер кадра должен иметь объем порядка 3 Мбайт, причем весь буфер должен считываться с частотой регенерации.
Для инициализации переменной, которая хранит цвет, удобно использовать как шестнадцатеричную систему исчисления, так и макрос RGB прототип которого имеет вид:
COLORREF RGB ( BYTE red , BYTE green , BYTE blue) ;
Выражения для основных цветов в виде шестнадцатеричной константы и с помощью вызова макроса RGB будут иметь вид:
Чёрный 0x00000000 RGB ( 0 , 0 , 0 )
Белый 0x00FFFFFF RGB ( 255 , 255 , 255 )
Светло-серый 0x00E4E4E4 RGB ( 232 , 232 , 232 )
Тёмно-серый 0x00A0A0A0 RGB ( 160 , 160 , 160 )
Красный 0x000000FF RGB ( 255 , 0 , 0 )
Зелёный 0x0000FF00 RGB ( 0 , 255 , 0 )
Синий 0x00FF0000 RGB ( 0 , 0 , 255 )
Жёлтый 0x0000FFFF RGB ( 255 , 255 , 0 )
Все цвета, которые имеют равные соотношения первичных компонентов, проявляются в виде оттенков серого цвета.
Разложить цвет на составляющие можно с помощью макросов GetRValue, GetGValue, GetBValue.
Стандартное диалоговое окно Выбора цвета позволяет пользователю выбрать цвет из 48 цветов основной палитры, а также определить дополнительные цвета. Диалоговое окно имеет вид, показанный на рисунке.
Конструктор класса имеет следующий прототип:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.