Операции двоичного растра
В этом разделе перечислены коды двоичных растровых операций, используемые функциями 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 | Видимая красная и зеленая линия |