Поделиться через


Операции двоичного растра

В этом разделе перечислены коды двоичных растровых операций, используемые функциями GetROP2 и SetROP2. Коды операций растра определяют, как GDI объединяет биты из выбранного пера с битами в целевом растровом рисунке.

Каждый код растровой операции представляет логическую операцию, в которой значения пикселей в выбранном пере и целевом растровом рисунке объединяются. Ниже приведены два операнда, которые используются в этих операциях.

Операнд Значение
P Выбранное перо
D Точечный рисунок назначения

 

Логические операторы, используемые в этих операциях, следуют.

Оператор Значение
a Битовое И
n Битовая НЕ (инверсная)
o Битовое ИЛИ
x Побитовая эксклюзивная OR (XOR)

 

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

DPo 

Каждый код растровой операции представляет собой 32-разрядное целое число, слово с высоким порядком которого является логическим индексом операций и словом с низким порядком является код операции. 16-разрядный индекс операций — это 8-разрядное значение, представляющее все возможные результаты, полученные из логического выполнения двух параметров (в этом случае значения пера и назначения). Например, индексы операций для операций DPo и DPan отображаются в следующем списке.

P D DPo Dpan
0 0 0 1
0 1 1 1
1 0 1 1
1 1 1 0

 

В следующем списке описаны режимы рисования и логические операции, которые они представляют.

Операция растра Логическое действие
R2_BLACK 0
R2_COPYPEN P
R2_MASKNOTPEN DPna
R2_MASKPEN DPa
R2_MASKPENNOT PDna
R2_MERGENOTPEN DPno
R2_MERGEPEN DPo
R2_MERGEPENNOT PDno
R2_NOP D
R2_NOT Dn
R2_NOTCOPYPEN Pn
R2_NOTMASKPEN DPan
R2_NOTMERGEPEN DPon
R2_NOTXORPEN DPxn
R2_WHITE 1
R2_XORPEN DPx

 

Для монохромного устройства GDI сопоставляет значение нуля с черным, а значение 1 — белым. Если приложение пытается нарисовать с черным пером в белом месте назначения с помощью доступных двоичных операций растра, возникают следующие результаты.

Операция растра Результат
R2_BLACK Видимая черная линия
R2_COPYPEN Видимая черная линия
R2_MASKNOTPEN Невидимая строка
R2_MASKPEN Видимая черная линия
R2_MASKPENNOT Видимая черная линия
R2_MERGENOTPEN Невидимая строка
R2_MERGEPEN Видимая черная линия
R2_MERGEPENNOT Видимая черная линия
R2_NOP Невидимая строка
R2_NOT Видимая черная линия
R2_NOTCOPYPEN Невидимая строка
R2_NOTMASKPEN Невидимая строка
R2_NOTMERGEPEN Видимая черная линия
R2_NOTXORPEN Видимая черная линия
R2_WHITE Невидимая строка
R2_XORPEN Невидимая строка

 

Для цветового устройства GDI использует значения RGB для представления цветов пера и назначения. Значение цвета RGB — это длинное целое число, содержащее красное, зеленое и синее поле цвета, каждое из которых указывает интенсивность указанного цвета. Интенсивность от 0 до 255. Значения упаковываются в три байта с низким порядком длинного целого числа. Цвет пера всегда является сплошным цветом, но цвет назначения может быть смесью любого из двух или трех цветов. Если приложение пытается нарисовать с помощью белого пера в синем месте назначения с помощью доступных двоичных операций растра, возникают следующие результаты.

Операция растра Результат
R2_BLACK Видимая черная линия
R2_COPYPEN Видимая белая линия
R2_MASKNOTPEN Видимая черная линия
R2_MASKPEN Невидимая синяя линия
R2_MASKPENNOT Видимая красная и зеленая линия
R2_MERGENOTPEN Невидимая синяя линия
R2_MERGEPEN Видимая белая линия
R2_MERGEPENNOT Видимая белая линия
R2_NOP Невидимая синяя линия
R2_NOT Видимая красная и зеленая линия
R2_NOTCOPYPEN Видимая черная линия
R2_NOTMASKPEN Видимая красная и зеленая линия
R2_NOTMERGEPEN Видимая черная линия
R2_NOTXORPEN Невидимая синяя линия
R2_WHITE Видимая белая линия
R2_XORPEN Видимая красная и зеленая линия