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 |