Operaciones de ráster binario
En esta sección se enumeran los códigos binarios de operación de trama que usan las funciones GetROP2 y SetROP2 . Los códigos de operación de trama definen cómo GDI combina los bits del lápiz seleccionado con los bits del mapa de bits de destino.
Cada código de operación ráster representa una operación booleana en la que se combinan los valores de los píxeles del lápiz seleccionado y el mapa de bits de destino. A continuación se muestran los dos operandos que se usan en estas operaciones.
Operando | Significado |
---|---|
P | Lápiz seleccionado |
D | Mapa de bits de destino |
Los operadores booleanos que se usan en estas operaciones siguen.
Operator | Significado |
---|---|
a | AND bit a bit |
n | NOT bit a bit (inverso) |
o | OR bit a bit |
x | OR exclusivo bit a bit (XOR) |
Todas las operaciones booleanas se presentan en notación polaca inversa. Por ejemplo, la siguiente operación reemplaza los valores de los píxeles del mapa de bits de destino por una combinación de los valores de píxeles del lápiz y el pincel seleccionado:
DPo
Cada código de operación ráster es un entero de 32 bits cuya palabra de orden superior es un índice de operación booleano y cuya palabra de orden bajo es el código de operación. El índice de operación de 16 bits es un valor de 8 bits extendido de cero que representa todos los resultados posibles resultantes de la operación booleana en dos parámetros (en este caso, el lápiz y los valores de destino). Por ejemplo, los índices de operación para las operaciones DPo y DPan se muestran en la lista siguiente.
P | D | Dpo | Dpan |
---|---|---|---|
0 | 0 | 0 | 1 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 |
1 | 1 | 1 | 0 |
En la lista siguiente se describen los modos de dibujo y las operaciones booleanas que representan.
Operación de trama | Operación 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 un dispositivo monocromo, GDI asigna el valor cero al negro y el valor 1 a blanco. Si una aplicación intenta dibujar con un lápiz negro en un destino blanco mediante las operaciones de trama binaria disponibles, se producen los resultados siguientes.
Operación de trama | Resultado |
---|---|
R2_BLACK | Línea negra visible |
R2_COPYPEN | Línea negra visible |
R2_MASKNOTPEN | Sin línea visible |
R2_MASKPEN | Línea negra visible |
R2_MASKPENNOT | Línea negra visible |
R2_MERGENOTPEN | Sin línea visible |
R2_MERGEPEN | Línea negra visible |
R2_MERGEPENNOT | Línea negra visible |
R2_NOP | Sin línea visible |
R2_NOT | Línea negra visible |
R2_NOTCOPYPEN | Sin línea visible |
R2_NOTMASKPEN | Sin línea visible |
R2_NOTMERGEPEN | Línea negra visible |
R2_NOTXORPEN | Línea negra visible |
R2_WHITE | Sin línea visible |
R2_XORPEN | Sin línea visible |
Para un dispositivo de color, GDI usa valores RGB para representar los colores del lápiz y el destino. Un valor de color RGB es un entero largo que contiene un campo de color rojo, verde y azul, cada uno de los cuales especifica la intensidad del color especificado. Las intensidades van de 0 a 255. Los valores se empaquetan en los tres bytes de orden bajo del entero largo. El color de un lápiz siempre es un color sólido, pero el color del destino puede ser una mezcla de dos o tres colores. Si una aplicación intenta dibujar con un lápiz blanco en un destino azul mediante las operaciones de trama binaria disponibles, se producen los resultados siguientes.
Operación de trama | Resultado |
---|---|
R2_BLACK | Línea negra visible |
R2_COPYPEN | Línea blanca visible |
R2_MASKNOTPEN | Línea negra visible |
R2_MASKPEN | Línea azul invisible |
R2_MASKPENNOT | Línea de color rojo/verde visible |
R2_MERGENOTPEN | Línea azul invisible |
R2_MERGEPEN | Línea blanca visible |
R2_MERGEPENNOT | Línea blanca visible |
R2_NOP | Línea azul invisible |
R2_NOT | Línea de color rojo/verde visible |
R2_NOTCOPYPEN | Línea negra visible |
R2_NOTMASKPEN | Línea de color rojo/verde visible |
R2_NOTMERGEPEN | Línea negra visible |
R2_NOTXORPEN | Línea azul invisible |
R2_WHITE | Línea blanca visible |
R2_XORPEN | Línea de color rojo/verde visible |