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