Operações de raster binário
Esta seção lista os códigos binários de operação de raster usados pelo GetROP2 e funções de 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 booleana na qual os valores dos pixels na caneta selecionada e o bitmap de destino são combinados. A seguir estão os dois operandos usados nessas operações.
Operando | Significado |
---|---|
P | Caneta selecionada |
D | Bitmap de destino |
Seguem-se os operadores booleanos utilizados nestas operações.
Operador | Significado |
---|---|
um | Bitwise E |
n | Bitwise NÃO (inverso) |
o | Bitwise OU |
x | Bitwise exclusivo OR (XOR) |
Todas as operações booleanas são apresentadas em notação polonesa reversa. 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 ordem alta é um índice de operação booleano e cuja palavra de ordem baixa é o código de operação. O índice de operação de 16 bits é um valor de 8 bits estendido a zero que representa todos os resultados possíveis resultantes da operação booleana em dois parâmetros (neste caso, os valores de caneta e 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 booleanas que eles representam.
Operação raster | Operação booleana |
---|---|
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, o 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 rasterização binárias disponíveis, os seguintes resultados ocorrerão.
Operação raster | Resultado |
---|---|
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 cores, o GDI usa valores RGB para representar as cores da caneta e o 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 compactados nos três bytes de ordem baixa do inteiro longo. A cor de uma caneta é sempre uma cor sólida, mas a cor do destino pode ser uma mistura de quaisquer duas ou três cores. Se um aplicativo tentar desenhar com uma caneta branca em um destino azul usando as operações de rasterização binárias disponíveis, os seguintes resultados ocorrerão.
Operação raster | Resultado |
---|---|
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 |