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


Двоичные растровые операции

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

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

Операнд Значение
С Выбранное перо
D Растровое изображение назначения

 

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

Оператор Значение
а Побитовое И
n Побитовое NOT (обратное)
o Побитовое ИЛИ
x Побитовое исключающее ИЛИ (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 Видимая красная/зеленая линия