void putpixel(int x,int y,int numcolor);
que pone el color correspondiente a 'numcolor' en la posición (x,y) de la pantalla (debemos tener presente que el sistema de coordenadas en TurboC, y en casi todas las librerías gráficas 2D, tiene su eje Y vertical, pero con el sentido positivo de arriba hacia abajo). Igual que muchas funciones BGI, 'putpixel' tiene su versión recíproca, 'getpixel', para averiguar el color de una posición de pantalla determinada (getpixel(x,y), que devuelve un entero con el índice del color en la paleta). Se pueden escribir o leer rectángulos de pixels completos (pixmaps o imágenes) usando las funciones:
void putimage(int x0,int y0,unsigned char *pixmap,int tipo); void getimage(int x0,int y0,int x1,int y1,unsigned char *pixmap);
En putimage se especifican las coordenadas a partir de la cual se copia la imagen almacenada en la matriz 'pixmap'. 'tipo' indica el código de la función lógica que se va a efectuar entre los nuevos valores de los pixels y los antiguos. Estos valores son:
COPY_PUT Copia el pixmap tal como es XOR_PUT Copia haciendo una O exclusiva con el fondo OR_PUT Copia haciendo una O con el fondo AND_PUT Copia haciendo una Y con el fondo (máscara) NOT_PUT Copia invirtiendo la imagen
La forma común de dibujar es, sin embargo, usar primitivas gráficas o formas predefinidas. Veamos algunas de ellas:
void line(int x0,int y0,int x1,int y1); void rectangle(int x0,int y0,int x1,int y1); void circle(int x,int y,int radio); void arc(int x,int y,int angulo_ini,int angulo_fin,int radio);
Todas ellas dibujan trazos, pero sin rellenar. Algunas tienen además versiones con relleno (filling), y también existe una función general para rellenar el interior de cualquier figura:
void floodfill(int x,int y,in color_borde);
que rellena una figura comenzando por el punto (x,y) hasta que se encuentre con un contorno de color_borde. Antes de usarla hay que asegurarse de que (x,y) está en el interior del contorno a rellenar, no fuera o justo en el borde. También hay que asegurarse de que el contorno está perfectamente cerrado, sin aberturas.
Hay una primitiva que sí se dibuja rellena, es:
void bar(int x0,int y0,int x1,int y1);
que dibuja un rectángulo relleno con el estilo actual.
En esta librería, no se distingue la modificación del estilo de dibujo de líneas con la modificación del estilo de relleno, teniendo una única función que cambia la forma de rellenar las primitivas. Si llamamos a la siguiente función antes de dibujar primitivas, las que se dibujen serán de acuerdo al estilo definido por ella (hasta una nueva llamada a dicha función que vuelva a modificar el estilo):
void setfillstyle(int patron,int numcolor);
La variable 'patron' es un número que lo identifica, y 'numcolor' es el color con el que se efectuará el relleno. En el fichero de cabecera 'graphics.h' vienen definidas unas constantes para los valores posibles que puede tomar 'patron', valores que vemos a continuación:
EMPTY_FILL (0) Relleno con el color de fondo SOLID_FILL (1) Relleno de color liso LINE_FILL (2) Relleno con líneas LTSLASH_FILL (3) Relleno con barras finas SLASH_FILL (4) Relleno con barras BKSLASH_FILL (5) Relleno con barras invertidas LTBKSLASH_FILL (6) Relleno con barras invertidas finas HATCH_FILL (7) Relleno con trama fina XHATCH_FILL (8) Relleno con trama INTERLEAVE_FILL (9) Relleno dejando espacios WIDE_DOT_FILL (10) Relleno con puntos muy espaciados CLOSE_DOT_FILL (11) Relleno con puntos poco espaciados USER_FILL (12) Rellenar con patrón definido por el usuario
Si escogemos 'USER_FILL', debemos usar la función 'setfillpattern()', cuya cabecera es:
void setfillpattern(char *patron,int numcolor);
donde 'patron' es un array de 8 bytes. Este patrón se distribuirá como un patrón de 8x8 bits. Si un bit está activado, se muestra el pixel del color que especifica 'numcolor', en caso contrario, se muestra el color del fondo.
Otra importante parte de las librerías gráficas se dedica a la representación de textos en la ventana gráfica. Algunas de las funciones más elementales serían:
void settextstyle(int fuente,int dirección,int tamaño);
que indica el estilo actual para escribir texto, qué fuente de texto se utiliza, si la dirección es horizontal(0) o vertical(1) y el tamaño (de 1 a 10) de las letras. Los códigos y las constantes definidas para la fuente a usar los tenemos a continuación:
DEFAULT_FONT (0) TRIPLEX_FONT (1) SMALL_FONT (2) SANS_SERIF_FONT (3) GOTHIC_FONT (4)
Para escribir cadenas de caracteres se usan las funciones:
void outtext(char *cadena); void outtextxy(int x,int y,char *cadena);
Mientras que outtext muestra el texto a partir de la posición de la última operación gráfica, outtextxy lo hace a partir de la posición (x,y) indicada.
Por último, debemos saber cómo cerrar el modo gráfico cuando nuestra aplicación termine. Para ello, debemos usar la función:
void closegraph(void);
que devuelve al sistema al modo de vídeo en el que estaba antes de llamar a la función 'initgraph'. Podemos usar, en lugar de 'closegraph', la función void restorecrtmode(void) si el programa ya está terminado. En este caso, se libera de forma automática toda la memoria asignada.
© Abril de 2.001 Lola Cárdenas Luque, lornacl@iname.com