
- •КОНТЕКСТ УСТРОЙСТВА
- •Класс CDC и его производные
- •Объявление контекста
- •РАБОТА С ТЕКСТОМ
- •Вывод текста. Функция TextOut
- •Вывод текста в прямоугольнике отсечения. Функция ExtTextOut
- •Цвет фона. Функции GetBkColor, SetBkColor
- •Цвет символов текста. Функции GetTextColor, SetTextColor
- •Выравнивание текста. Функции GetTextAlign, SetTextAlign
- •Пример рисования текста
- •ЦВЕТОВАЯ СИСТЕМА RGB
- •ДИАЛОГОВОЕ ОКНО ВЫБОРА ЦВЕТА
- •Конструктор класса CColorDialog
- •Отображение диалогового окна. Функция DoModal
- •Получение выбранного цвета. Функция GetColor
- •Пример использования диалогового окно выбора цвета
- •МОДЕЛЬ ПЕРЬЕВОГО ПЛОТТЕРА
- •Перемещение карандаша. Функция MoveTo
- •Рисование отрезка. Функция LineTo
- •Рисование точки. Функция SetPixel
- •Получение цвета точки. Функция GetPixel
- •РИСОВАНИЕ ГРАФИЧЕСКИХ ПРИМИТИВОВ
- •Рисование прямоугольника. Функция Rectangle
- •Рисование округлённого прямоугольника. Функция RoundRect
- •Рисование эллипса. Функция Ellipse
- •Рисование эллиптической дуги. Функция Arc
- •Рисование эллиптической дуги и хорды. Функция Chord
- •Рисование ломаной линии. Функция Polyline
- •КАРАНДАШ. КЛАСС CPEN
- •Конструкторы класса СРеn
- •Создание карандаша. Функция CreatePen
- •Создание указателя на карандаш. Тип HPEN
- •Использование объекта. Функция SelectObject
- •Получение атрибутов объекта. Функция GetObject
- •НАСТРОЙКА РЕЖИМА ОТОБРАЖЕНИЯ
- •Выбор единиц измерения. Функция SetMapMode
- •Размер прямоугольника. Структура SIZE
- •Получение размеров клиентской области. Функция GetClientRect
- •Пример настройки режима отображения
- •КИСТЬ. КЛАСС CBRUSH
- •Конструкторы класса CBrush
- •Образец физической кисти. Структура LOGBRUSH
- •Создание кисти
- •Пример создания и использования кисти
- •Создание точечного рисунка. Функция CreateBitmap
- •Создание ресурса точечного рисунка
- •Загрузка ресурса точечного рисунка. Функция LoadBitmap

Лекция 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 ) |
Выжол Ю.А.