18 Transparencias y dibujo con patr�n


void drawing_mode(int mode, BITMAP *pattern, int x_anchor, int y_anchor);
Ajusta el modo de dibujo gr�fico. Esto s�lo afecta a las rutinas geom�tricas como putpixel, lines, rectangles, circles, polygons, floodfill, etc, y no a la salida de texto, blits o dibujado de sprites. El modo deber�a ser uno de los siguientes valores.

      DRAW_MODE_SOLID               - por defecto, dibujado s�lido
      DRAW_MODE_XOR                 - dibujado or-exclusivo
      DRAW_MODE_COPY_PATTERN        - rellenado con patr�n multicolor
      DRAW_MODE_SOLID_PATTERN       - rellenado con patr�n de un solo color
      DRAW_MODE_MASKED_PATTERN      - rellenado con patr�n enmascarado
      DRAW_MODE_TRANS               - fundido de color transl�cido
En DRAW_MODE_XOR, los pixels son escritos en el bitmap con una operaci�n or-exclusiva en vez de con la copia simple, por lo que dibujar la misma figura dos veces la borrar�. Como esto requiere tanto leer como escribir en el bitmap de memoria, el dibujado xor es mucho m�s lento que el modo normal.

Con los modos con patr�n, usted indica un bitmap de patr�n que ser� dibujado sobre la superficie de la figura. Allegro almacena un puntero a este bitmap en vez de una copia, por lo que no debe destruir el bitmap mientras sea usado como patr�n. El ancho y alto del patr�n debe ser un m�ltiplo de dos, pero pueden ser diferentes, es decir, un patr�n de 64x16 est� bien, pero uno de 17x3 no. El patr�n ser� repetido en una rejilla comenzando en el punto (x_anchor, y_anchor). Normalmente deber�a pasar cero para estos valores, lo que le dejar� dibujar varias figuras y que sus patrones se junten en los bordes. Un alineamiento de cero puede sin embargo ser peculiar cuando mueva una figura con patr�n por la pantalla, porque la figura se mover�, pero el patr�n no, por lo que en algunas situaciones quiz�s le interese alterar las posiciones del ancla (anchor).

Cuando selecciona DRAW_MODE_COPY_PATTERN, los pixels simplemente son copiados del bitmap de patr�n al bitmap destino. Esto le permite usar patrones multicolor, y significa que el color que pase a la rutina de dibujado es ignorado. Este es el m�s r�pido de los modos con patr�n.

En DRAW_MODE_SOLID_PATTERN, cada pixel del patr�n es comparado con el color de m�scara (cero en modos de 256 colores, rosa fucsia en modos truecolor). Si el pixel del patr�n es s�lido, un pixel del color que pas� a la rutina de dibujado es escrito en el bitmap destino, de otro modo escribe un cero. El patr�n es por esto tratado como una m�scara monocroma, que le permite usar el mismo patr�n para dibujar diferentes figuras con colores diferentes, pero previene el uso de patrones multicolores.

DRAW_MODE_MASKED_PATTERN es casi lo mismo que DRAW_MODE_SOLID_PATTERN, pero los pixels enmascarados son ignorados en vez de copiados como cero, por lo que el fondo se ver� a trav�s de los agujeros.

En DRAW_MODE_TRANS, la tabla global color_map o las funciones de fundido se usan para sobreimprimir pixels encima de la im�gen existente. Esta s�lo debe usarse despu�s de haber constu�do la tabla de mapeo de color (para modos de 256 colores) o las funciones de fundido (para modos truecolor). Dado que debe leer y escribir en la memoria del bitmap, el dibujado transparente es muy lento si dibuja directamente en la memora de v�deo, as� que siempre que sea posible deber�a dibujar en bitmaps de memor�a.

Relacionado con: xor_mode, solid_mode, color_map, set_trans_blender.
void xor_mode(int on);
Esto es un atajo para activar o desactivar el modo de dibujado xor. Llamar xor_mode(TRUE) es equivalente a drawing_mode (DRAW_MODE_XOR, NULL, 0, 0); Llamar xor_mode(FALSE) es equivalente a drawing_mode (DRAW_MODE_SOLID, NULL, 0, 0);
Relacionado con: drawing_mode.
void solid_mode();
Esto es un atajo para seleccionar el dibujado s�lido. Es equivalente a llamar drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0);
Relacionado con: drawing_mode.

Transparencia en modos de 256 colores

En modos de v�deo con paleta, la translucidez y la iluminaci�n son implementadas con una tabla precalculada de 64k, que contiene el resultado de la combinaci�n de cualquier color c1 con c2. Tiene que crear esta tabla antes de usar cualquiera de las rutinas de iluminaci�n o translucidez. Dependiendo de c�mo se crea tabla, ser� posible hacer un rango diferente de efectos. Por ejemplo, la translucidez se puede implementar usando un color intermedio entre c1 y c2 como resultado de su combinaci�n. La iluminaci�n se consigue tratando uno de los colores como nivel de luz (0-255) en vez de como color, y creando la tabla apropiadamente. Un rango de efectos especializados es posible, si por ejemplo sustituye cualquier color con otro color haciendo los colores individuales de origen o destino totalmente s�lidos o invisibles.

Las tablas de color pueden ser precalculadas con la utilidad colormap, o generadas en tiempo real. La estructura COLOR_MAP se define as�:

   typedef struct {
      unsigned char data[PAL_SIZE][PAL_SIZE];
   } COLOR_MAP;
extern COLOR_MAP *color_map;
Puntero global a una tabla de color. �Esto debe ser ajustado antes de usar cualquiera de las funciones de dibujado transl�cido o iluminado en modos de 256 colores!
Relacionado con: create_color_table, create_light_table, create_trans_table, set_trans_blender, draw_trans_sprite, draw_lit_sprite, drawing_mode.
void create_light_table(COLOR_MAP *table, const PALETTE pal, int r, g, b, void (*callback)(int pos));
Llena la tabla de mapeo de color especificada con los datos precalculados necesarios para hacer efectos de translucidez con la paleta especificada. Cuando se combinan los colores c1 y c2 con esta tabla, c1 se trata como un nivel de luz desde 0 a 255. Con un nivel de luz de 255 la tabla devolver� el color c2 sin cambios, con un nivel de luz 0 devolver� el valor r,g,b que especifque a la funci�n, y con niveles de luz intermedios devolver� un color intermedio. Los valores r,g y b est�n entre 0-63. Si la funci�n callback no es NULL, se la llamar� 256 veces durante el c�lculo, permiti�ndole mostrar un indicador de progreso.
Relacionado con: color_map, create_trans_table, create_color_table, create_blender_table, draw_lit_sprite.
void create_trans_table(COLOR_MAP *table, const PALETTE pal, int r, g, b, void (*callback)(int pos));
Rellena la tabla de color especificada con los datos precalculados necesarios para hacer efectos de translucidez con la paleta especificada. Cuando se combinan los colores c1 y c2 en esta tabla, el resultado ser� un color intermedio entre los dos. Los valores r, g, b que especifique son la solidez de cada componente de color, desde 0 (totalmente transparente) hasta 255 (totalmente s�lido). Para una solidez del 50%, pasa 128. Esta funci�n trata el color origen #0 como un caso especial, dejando el destino sin cambiar siempre que se encuentre un pixel del color cero, para que los sprites con m�scara puedan ser dibujados correctamente. Si la funci�n callback no es NULL, ser� llamada 256 veces durante el c�lculo, permiti�ndole ense�ar un indicador de progreso.
Relacionado con: color_map, create_light_table, create_color_table, draw_trans_sprite.
void create_color_table(COLOR_MAP *table, const PALETTE pal, void (*blend)(PALETTE pal, int x, int y, RGB *rgb), void (*callback)(int pos));
Llena la tabla de mapeo de color con datos precalculados necesarios para poder hacer efectos propios con la paelta especificada, llamando a la funci�n de fundido para determinar los resultados de cada combinaci�n de color. A su rutina de fundido se le pasar� un puntero a la paleta y los dos colores que van a ser combinados, y deber�a devolver el resultado deseado en una estructura RGB con formato 0-63. Entonces Allegro buscar� en la paleta aqu�l color que mejor encaje con el que pidi�, por lo que no importa si la paleta no tiene un color que encaje exactamente. Si la funci�n callback no es NULL, se le llamar� 256 veces durante el c�lculo, permiti�ndole que muestre un indicador de progreso.
Relacionado con: color_map, create_light_table, create_trans_table, create_blender_table.
void create_blender_table(COLOR_MAP *table, const PALETTE pal, void (*callback)(int pos));
Llena la tabla de mapeo de color especificada con datos precalculados para hacer un equivalente "paletizado" de cualquiera de los modos de fundido truecolor que est� actualmente seleccionado. Despu�s de llamar a set_trans_blender(), set_blender_mode() o cualquiera de las otras rutinas de modo de fundido, puede usar esta funci�n para crear un tabla de mapeo de 8 bits que tendr� los mismos resultados que el modo de fundido de 24 bits que tenga seleccionado.
Relacionado con: color_map, create_light_table, create_trans_table, create_color_table, set_trans_blender, set_blender_mode.

Transparencia en truecolor

En los modo de video truecolor, la translucidez y la iluminaci�n est�n implementadas por una funci�n de fundido de la forma:

   unsigned long (*BLENDER_FUNC)(unsigned long x, y, n);
Esta rutina toma dos colores como par�metros, los descompone en sus componenetes rojo, verde y azul, los combina acorde con el valor de interpolaci�n n, y entonces fusiona de nuevo el resultado en un solo valor de color, que devuelve.

Como estas rutinas se pueden usar desde diferentes profundidades de color, hay tres callbacks, una para usar con p�xels de 15 bits (5.5.5), una para p�xels de 16 bits (5.6.5), y otra para p�xels de 24 bits (8.8.8), que puede compartirse entre el c�digo de 24 y 32 bits dado que el empaquetamiento de bits es el mismo.


void set_trans_blender(int r, int g, int b, int a);
Selecciona el conjunto de rutinas de fundido por defecto, que hacen una interpolaci�n lineal simple entre los colores fuente y destino. Cuando se llama a una funci�n de dibujo transl�cido, el par�metro alfa ajustado por esta rutina se usa como factor de interpolaci�n, que controla la solidez del dibujado (de 0 a 255). Cuando una funci�n de dibujo iluminado de es llamada, el valor alfa se ignora, y se usa el color pasado a la funci�n de sprite para seleccionar un nivel alfa. La rutina de fundido se usar� para interpolar entre el color del sprite y los valores RGB que se le pasaron a esta funci�n (en un rango de 0 a 255).

Relacionado con: color_map, draw_trans_sprite, draw_lit_sprite, drawing_mode, set_add_blender, set_burn_blender, set_color_blender, set_blender_mode, set_alpha_blender, set_write_alpha_blender, set_difference_blender, set_dissolve_blender, set_dodge_blender, set_hue_blender, set_invert_blender, set_luminance_blender, set_multiply_blender, set_saturation_blender, set_screen_blender.
void set_alpha_blender();
Activa el modo de fundido especial de canal-alfa, que se usa para dibujar sprites RGBA de 32 bits. Despu�s de llamar a esta funci�n, puede usar draw_trans_sprite() o draw_trans_rle_sprite() para dibujar una imagen de 32 bits en un otra hicolor o truecolor. Los valore alfa se tomar�n directamente del gr�fico origen, as�q ue puede variar la solidez de cada parte de la imagen. Sin embargo, no puede usar ninguna de las funciones normales de translucidez mientras este modo est� activo, as� que deber�a volver a uno de los modos normales de fundido (p.ej. set_trans_blender()) antes de dibujar otra cosa que no sean sprites en RGBA de 32 bits.
Relacionado con: set_trans_blender, draw_trans_sprite, draw_trans_rle_sprite, set_write_alpha_blender.
void set_write_alpha_blender();
Activa el modo especial de edici�n de canal-alfa, que se usa para dibujar canales alfa encima de un sprite RGB existente, para transformarlo en una imagen en formato RGBA. Despu�s de llamar a esta funci�n, puede ajustar el modo de dibujo a DRAW_MODE_TRANS y entonces escribir valores de color (de 0 a 255) en una im�gen de 32 bits. Esto dejar� los valores de color igual, pero alterar� el alfa con los valores que est� escribiendo. Despu�s de activar este modo tambi�n puede usar draw_trans_sprite() para superponer una mascara alfa de 8 bits encima de un sprite existente de 32 bits.
Relacionado con: set_alpha_blender, draw_trans_sprite, drawing_mode.
void set_add_blender(int r, int g, int b, int a);
Activa un modo de fundido de color para combinar p�xels truecolor iluminados o transl�cidos.
Relacionado con: set_trans_blender, drawing_mode.
void set_burn_blender(int r, int g, int b, int a);
Activa un modo de fundido "chamuscado" para combinar p�xels truecolor iluminados o transl�cidos. Aqu� el brillo de los colores de la imagen origen reduce el brillo de la imagen destino, oscureciendola.
Relacionado con: set_trans_blender, drawing_mode.
void set_color_blender(int r, int g, int b, int a);
Activa un modo de fundido de color para combinar p�xels truecolor iluminados o transl�cidos. Aplica s�lo el tono y saturaci�n de la imagen origen a la imagen destino. La luminosidad de la imagen destino no queda afectada.
Relacionado con: set_trans_blender, drawing_mode.
void set_difference_blender(int r, int g, int b, int a);
Activa el modo de fundido por diferencia para combinar p�xels truecolor transl�cidos o iluminados. Esto crea una im�gen que tiene colores calculados por la diferencia entre los colores fuente y destino.
Relacionado con: set_trans_blender, drawing_mode.
void set_dissolve_blender(int r, int g, int b, int a);
Activa un modo de fundido por disoluci�n para combinar p�xels truecolor transl�cidos o iluminados. Aleatoriamente, reemplaza los colores de algunos p�xels de la imagen destino con los correspondientes de la im�gen origen. El n�mero de pixels reeemplazados depende del valor alpha (cuanto m�s alto sea el valor, m�s pixels se reemplazar�n; va pillando la idea :)
Relacionado con: set_trans_blender, drawing_mode.
void set_dodge_blender(int r, int g, int b, int a);
Activa un mode de fundido "trucado" para combinar p�xels truecolor iluminados o transl�cidos. La claridad de colores en la im�gen origen ilumina los colores de la imagen destino. El mayor efecto se consigue con el blanco; el negro no tiene ning�n efecto.
Relacionado con: set_trans_blender, drawing_mode.
void set_hue_blender(int r, int g, int b, int a);
Activa un modo de fundido por tono para combinar p�xels truecolor iluminados o transl�cidos. �ste aplica el tono del origen al destino.
Relacionado con: set_trans_blender, drawing_mode.
void set_invert_blender(int r, int g, int b, int a);
Activa el modo de fundido inverso para combinar p�xels truecolor iluminados o transl�cidos. Funde el color inverso (o negativo) del origen con el de destino.
Relacionado con: set_trans_blender, drawing_mode.
void set_luminance_blender(int r, int g, int b, int a);
Activa el modo de fundido de iluminaci�n para combinar p�xels truecolor iluminados o transl�cidos. Aplica la ilumincaci�n del origen al destino. El color de la destinaci�n no queda afectado.
Relacionado con: set_trans_blender, drawing_mode.
void set_multiply_blender(int r, int g, int b, int a);
Activa un modo de fundido por multiplicaci�n para combinar p�xels truecolor iluminados o transl�cidoz. Combina las im�genes origen y destino, multiplicando los coloroes para producir un color m�s oscuro. Si el color se multiplica por blanco no cambia; cuando se multiplica por negro se vuelve negro.
Relacionado con: set_trans_blender, drawing_mode.
void set_saturation_blender(int r, int g, int b, int a);
Activa un modo de fundido de saturaci�n para combinar p�xels truecolor iluminados o transl�cidos. Aplica la saturaci�n del origen a la imagen destino.
Relacionado con: set_trans_blender, drawing_mode.
void set_screen_blender(int r, int g, int b, int a);
Activa un modo de fundido de pantalla para combinar p�xels truecolor iluminados o transl�cidos. Este modo de fundido ilumina el color de la imagen destino multiplicando el color inverso del origen con el color destino. Es m�s o menos el opuesto al modo de fundido por multiplicaci�n.
Relacionado con: set_trans_blender, drawing_mode.
void set_blender_mode(BLENDER_FUNC b15, b16, b24, int r, g, b, a);
Especif�ca un conjunto de rutinas propias de fundido en truecolor, que pueden ser usadas para implementar cualquier modo de interpolaci�n que necesite. Esta funci�n comparte un �nico fundido entre los modos de 24 y 32 bits.
Relacionado con: draw_lit_sprite, drawing_mode, set_blender_mode_ex, set_trans_blender, color_map, draw_trans_sprite.
void set_blender_mode_ex(BLENDER_FUNC b15, b16, b24, b32, b15x, b16x, b24x, int r, g, b, a);
Como set_blender_mode(), pero le permite especificar un conjunto m�s completo de rutinas de fundido. Las rutinas b15, b16, b24 y b32 se usan cuando se vayan a dibujar p�xels en destinos con el mismo formato, meintras que b15x, b16x y b24x las usan draw_trans_sprite() y draw_trans_rle_sprite cuando van adibujar im�genes RGBA en un destino que tiene otro formato. Estos fundidos se les pasar� un par�metro x de 32 bits, junto con un valor y de una profundidad diferente de color, y debe hacer algo sensible como respuesta.
Relacionado con: set_blender_mode, set_alpha_blender.

Volver al Indice