Operações de raster binário

Esta seção lista os códigos de operação de raster binários usados pelas funções GetROP2 e SetROP2 . Os códigos de operação raster definem como o GDI combina os bits da caneta selecionada com os bits no bitmap de destino.

Cada código de operação de raster representa uma operação booliana na qual os valores dos pixels na caneta selecionada e o bitmap de destino são combinados. Veja a seguir os dois operandos usados nessas operações.

Operando Significado
P Caneta selecionada
D Bitmap de destino

 

Os operadores boolianos usados nessas operações seguem.

Operador Significado
um AND bit a bit
n NOT bit a bit (inverso)
o OR bit a bit
x OR exclusivo bit a bit (XOR)

 

Todas as operações boolianas são apresentadas na notação polonesa inversa. Por exemplo, a operação a seguir substitui os valores dos pixels no bitmap de destino por uma combinação dos valores de pixel da caneta e do pincel selecionado:

DPo 

Cada código de operação de raster é um inteiro de 32 bits cuja palavra de alta ordem é um índice de operação booliano e cuja palavra de baixa ordem é o código de operação. O índice de operação de 16 bits é um valor de 8 bits estendido zero que representa todos os resultados possíveis resultantes da operação booliana em dois parâmetros (nesse caso, a caneta e os valores de destino). Por exemplo, os índices de operação para as operações DPo e DPan são mostrados na lista a seguir.

P D Dpo Dpan
0 0 0 1
0 1 1 1
1 0 1 1
1 1 1 0

 

A lista a seguir descreve os modos de desenho e as operações boolianas que eles representam.

Operação raster Operação booliana
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

 

Para um dispositivo monocromático, a GDI mapeia o valor zero para preto e o valor 1 para branco. Se um aplicativo tentar desenhar com uma caneta preta em um destino branco usando as operações de raster binário disponíveis, os resultados a seguir ocorrerão.

Operação raster Result
R2_BLACK Linha preta visível
R2_COPYPEN Linha preta visível
R2_MASKNOTPEN Nenhuma linha visível
R2_MASKPEN Linha preta visível
R2_MASKPENNOT Linha preta visível
R2_MERGENOTPEN Nenhuma linha visível
R2_MERGEPEN Linha preta visível
R2_MERGEPENNOT Linha preta visível
R2_NOP Nenhuma linha visível
R2_NOT Linha preta visível
R2_NOTCOPYPEN Nenhuma linha visível
R2_NOTMASKPEN Nenhuma linha visível
R2_NOTMERGEPEN Linha preta visível
R2_NOTXORPEN Linha preta visível
R2_WHITE Nenhuma linha visível
R2_XORPEN Nenhuma linha visível

 

Para um dispositivo de cor, a GDI usa valores RGB para representar as cores da caneta e do destino. Um valor de cor RGB é um inteiro longo que contém um campo de cor vermelho, verde e azul, cada um especificando a intensidade da cor especificada. As intensidades variam de 0 a 255. Os valores são empacotados nos três bytes de ordem inferior do inteiro longo. A cor de uma caneta é sempre uma cor sólida, mas a cor do destino pode ser uma mistura de duas ou três cores. Se um aplicativo tentar desenhar com uma caneta branca em um destino azul usando as operações de varredura binária disponíveis, ocorrerão os resultados a seguir.

Operação raster Result
R2_BLACK Linha preta visível
R2_COPYPEN Linha branca visível
R2_MASKNOTPEN Linha preta visível
R2_MASKPEN Linha azul invisível
R2_MASKPENNOT Linha vermelha/verde visível
R2_MERGENOTPEN Linha azul invisível
R2_MERGEPEN Linha branca visível
R2_MERGEPENNOT Linha branca visível
R2_NOP Linha azul invisível
R2_NOT Linha vermelha/verde visível
R2_NOTCOPYPEN Linha preta visível
R2_NOTMASKPEN Linha vermelha/verde visível
R2_NOTMERGEPEN Linha preta visível
R2_NOTXORPEN Linha azul invisível
R2_WHITE Linha branca visível
R2_XORPEN Linha vermelha/verde visível