Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC Лекции PDF / VC 15 Лек Графика.pdf
Скачиваний:
41
Добавлен:
15.02.2015
Размер:
651.21 Кб
Скачать

Лекция 14

 

Работа с графикой

6

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 ) ;

}

ЦВЕТОВАЯ СИСТЕМА RGB

В зрительной системе человека существуют три типа цветовых рецепторов – колбочек. Каждый тип имеет свою зависимость чувствительности от длины световой волны. Максимумы этих кривых чувствительности располагаются в области красного, зелёного и синего цветов. Таким образом, мозг получает информацию о цвете в виде набора трёх сигналов, а не в виде непрерывной функции.

Подводя итог сказанному, получим основополагающий принцип трехкомпонентной теории цветовос-

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

Прямым следствием принципа трехкомпонентной теории цветовосприятия является возможность сформировать любой цвет как сумму первичных компонентов: красного (Red), зелёного (Green) и голубого (Blue). Цветовое соответствие при этом выражается соотношением

C = T1 R + T2 G + T3 B

В современных графических API стало возможным обеспечить правильную цветопередачу, причем аппаратно удается использовать алгоритмы аппроксимации, позволяющие достаточно приблизиться к полноценной RGB-модели отображения.

Концептуально в RGB-системе наложения цветов должны существовать три раздельных буфера кадра — по одному на каждый из первичных цветов. В каждом буфере за определенным пикселем на экране закреплен фиксированный адрес в памяти. В типовой системе, имеющей разрешение 1280 1024 пикселей, каждый из них описывается тремя байтами (24 битами): по одному байту соответственно для красного, зеленого и синего цвета. В результате буфер кадра должен иметь объем порядка 3 Мбайт, причем весь буфер должен считываться с частотой регенерации.

В библиотеке MFC для хранения цвета определён тип COLORREF, который является синонимом беззнакового целого числа unsigned int. Доля каждого из основных цветов кодируется числом от 0 до 255 и хранится в трёх младших байтах. Четвёртый байт используется для служебных целей.

S

B

G

R

4 байта Для инициализации переменной, которая хранит цвет, удобно использовать как шестнадцатеричную

систему исчисления, так и макрос 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 )

Выжол Ю.А.