Графический интерфейс GDI в Microsoft Windows


Выбор режима рисования


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

Однако это не единственная возможность. При выборе соответствующего режима рисования цвет линии (на растровых устройствах вывода, таких, как экран монитора) может зависеть от цвета подложки, причем зависимость может быть достаточно сложная.

Для выбора режима рисования предназначена функция SetROP2 :

int WINAPI SetROP2(HDC hdc, int fnDrawMode);

Параметр hdc предназначен для указания контекста отображения, в котором необходимо установить новый режим рисования, определяемый параметром fnDrawMode.

Функция SetROP2 возвращает код предыдущего режима рисования.

Процесс рисования на экране монитора заключается в выполнении логической операции над цветами точек экрана и цветами изображения. Ниже в таблице мы привели возможные значения для параметра fnDrawMode. Для каждого режима рисования в этой таблице есть формула, с использованием которой вычисляется результат, и краткое описание режима рисования. В формулах цвет пера обозначается буквой P, цвет подложки - D.

Режим рисования Формула Цвет пиксела
R2_COPYPEN P Соответствует (равен) цвету пера
R2_BLACK 0 Черный
R2_WHITE 1 Белый
R2_NOP D Не меняется, т. е. перо ничего не рисует
R2_NOT ~D Получается инвертированием цвета подложки, т. е. цвета пиксела до рисования
R2_NOTCOPYPEN ~P Получается инвертированием цвета пера
R2_MASKPEN P&D Комбинация компонент цветов, имеющихся как в цвете подложки, так и в цвете пера
R2_NOTMASKPEN ~(P&D) Инверсия предыдущего значения
R2_MERGEPEN P|D Комбинация компонент цветов подложки и пера
R2_NOTMERGEPEN ~(P|D) Инверсия предыдущего значения
R2_XORPEN P^D При определении цвета пиксела выполняется операция "ИСКЛЮЧАЮЩЕЕ ИЛИ" между компонентами цвета подложки и пера
R2_NOTXORPEN ~(P^D) Инверсия предыдущего значения
R2_MASKNOTPEN ~P & D Комбинация цвета подложки и инверсии цвета пера
R2_MASKPENNOT P & ~D Комбинация двух цветов: инверсии цвета подложки и цвета пера
R2_MERGENOTPEN ~P | D Комбинация компонент цветов подложки и инверсии цвета пера
R2_MERGEPENNOT P | ~D Комбинация инверсии цвета подложки и цвета пера
<


Начало  Назад  Вперед