Anterior Home Siguiente

Complementos gráficos

Carácterísticas del Modo Gráfico

En modo texto se manejan casillas de carcateres (generalmente de 80 columnas por 25 filas), en cambio en el modo gráfico se controlan puntos de la pantalla (pixels). Lás pantallas gráficas difierne unas de otras por la cantidad de pixles que puedne representar (resolución), así como en la variedad de colores que pueden ofrecer (paleta).

En C para trabajar con funciones gráficas se requiere de la cabecera graphics.h, y para iinciar el mod grafico se utiliza la sentencia:

initgraph(&driver, &modo,"ruta");

El driver o controlador hace referencia a aquella parte de hardware o software que permite poner en funcionamiento determinados recurso de un computador, en este caso los recursos gráficos de la pantalla, para lo cual usaremos los controladores cuya extensión es BGI

driver en nuestro caso deberá ser un valor entero tal como se indica a continuación:

DETECT0 (autodetección)
CGA1
MCGA2
EGA3
EGA644
EGAMONO5
IBM85146
HERCMONO7
ATT4008
VGA9
PC327010

modo es un entero que representa la más alta resolución para el driver seleccionado, como se indica a continuación para algunos controladores.

Driver GráficoModo GráficoColumnas
Valorx FilasPaleta
CGACGAC00320x200C0
CGAC11320x200C1
CGAC22320x200C2
CGAC33320x200C3
CGAHI4640x2002 colores
VGAVGALO0640x20016 colores
VGAMED1640x35016 colores
VGAMED2640x48016 colores

El parámetro "ruta" incica la ubicación donde se encuentran los controladores, y que generalmente es "C:\TC"

Si controlador y/o modo no corresponden a valores válidos se obtienen resultados impredecibles. Para evitar este tipo de resultados de inicaliza controlodor con elvalor DETECT o 0, que genera una autodetección del controlador gráfico, y con lo cual además ya no es necesario especificar modo.

Para detectar si al incializar el modo gráfico se ha producido algún error, se utiliza la función graphresult(); que devuelve un entero correspondiente al resultado de la incialización del modo gráfico.

Se puede utilizar además la función grapherrormsg(codigo) para devolver el mensaje correspondiente al codigo obtenido con graphresult()

A continuación se listan algunos códigos

Código ErrorIdentificador de la constanteSuceso
0grOkNo hubo error
-1grNoInitGraph(BGI) modo gráfico no instalado (use initgraph)
-2grNotDetectedHardware gráfico no detectado
etc...

Un ejemplo básico del uso de las funciones mencionadas hasta el momento se muestra a continuación:

#include <stdio.h>
#include <stdlib.h>
#include <graphics.h> /* librería grafica */

main()
{
	int gdriver=DETECT, modo, codigoerror;

	/* inicializa el modo grafico */
	initgraph(&gdriver, &modo,"c:\tc");

	codigoerror=graphresult();

	if(codigoerror!=grOk)
	  {
		printf("\nError al iniciar elmodo gráfico");
		printf("\nError: %d = %s",codigoerror,grapherrormsg(codigoerror));
		printf("\nPresione cualquier tecla para continuar...");
		exit(1);
	  }

	setbkcolor(BLUE); /* establece color de fondo */
	setcolor(RED);    /* establece color de dibujo */

	cleardevice(); /* limpia pantalla gráfica */

	circle(100,100,70);

	getch();
	closegraph(); /* cierra el modo gráfico */
}

Coordenadas en el modo gráfico

Como se mencionó antes en el modo grafico lo que se manejan no son casillas de caracteres sino puntos (pixeles), los cuales se identifican con coordenadas que indican su posición a apertir de la esquina superior izquierda de la pantalla. Hay que hacer notar que las coordenadas de la esquina superior derecha corresponden a la posición x=0, y=0 (en modo texto esta esquina tine el valos (1,1) ).

Por convencion x corresponde a la distancia horizontal medida desde la esquina superior izqueierda e y a la distancia vertical medida desde la misma referencia (y crece a medida que uno se desplaza hacia abajo en la pantalla).

Para saber cual es los valores másximos disponibles en un determinado modo gráfico, se utilizan las funciones getmaxx() que devuelve la máxima coordenada x disponible, y getmaxy() que realiza los mismo pero para la coordenada y.

Para colocar un punto de un color en la pantalla se utiliza la función putpixel(x,y,color), que dibujara un pixel en la posición (x,y) del color definido en el parámetro color.

Por otro lado getpixel(x,y) retorna el en tero correspondiente al color del punto ubicado en la posición (x,y).

Si se quiere limpiar la pantalla se utiliza la función cleardevice() que es la análoga a clrscr() en modo texto.

Para mover la posición actual en el modo grafico se pueden usar cualquiera de las siguientes funciones:

moveto(x,y):que nos llevar a la posición (x,y), o

moverel(dx,dy): que nos moverá a las posicíon (x+dx,y+dy), donde (x,y) es la posición actual.

Los Colores

El atributo color se puede usar tanto en modo gráfico como en modo texto.

A continuación se muestra una tabla con listados de colores, en el cual se indica además si dicho color se puede utilizar como fondo o como frente (color de dibujos):

ConstanteValorFondoFrenteColor
BLACK0sisinegro
BLUE1sisiazul
GREEN2sisiverde
CYAN3sisician
RED4sisirojo
MAGENTA5sisimagenta
BROWN6sisimarrón
LIGHTGRAY7nosigris claro
DARKGRAY8nosigris oscuro
LIGHTBLUE9nosiazul claro
LIGHTGREEN10nosiverde claro
LIGHTCYAN11nosician claro
LIGHTRED12nosirojo claro
LIGTHMAGENTA13nosimagenta claro
YELLOW14nosiamarillo
WHITE15nosiblanco
BLINK128no***intermitente

Para definir el color de fondo se utiliza la función setbkcolor(color), y para definir el color de dibujo setcolor(color), donde color puede tomar cualquiera de los valores de la tabla anterior, ya sea con a traves de su valor textual o su valor entero.

Líneas y figuras geométricas

Para dibujar figuras se utiliza el color, que previamente se ha definido con setcolor().

Una línea entre los puntos (x1,y1) y (x2,y2) se dibuja medinate la función: line(x1,y1,x2,y2);

Si se quiere definir tipo de línea se utiliza la función setlinestyle(estilo, estilo_usuario, espesor);

estilo puede ser:

SOLID_LINELínea Sólida
DOTTED_LINELínea Punteada
CENTER_LINELínea Centrada
DASHED_LINELínea Sólida
USERBIT_LINELínea Definida por el usuario

Espesor puede tomar un valor entero entre 1 y 3.

Si se quiere utilizar un estilo definido por el usuario se puede incializar una variable entera con un valor decimal equivalente a un número binario que represente el patrón. y utilizar dicha variable en el parámetro estilousuario.

Para dibujar un rectangilo se utiliza la función rectangle(x1,y1,x2,y2); donde (x1,y1) representan las coordenadas de la esquina superior izquierda, y (x2,y2) las coordenadas de la esquina inferior derecha.

Un círculo se dibuja con la función circle(x,y,radio); donde (x,y) representan las coordenadas del centro del círculo y radio el radio del circulo.

Se pueden encontrar más funciones para dibujar figuras revisando la librería graphics.h

Manejo de texto

Para poder ecribir texto en la pantalla gráfica se utilizan las funciones: outtext(cadena) y outtextxy(x,y,cadena). En la segunda función (x,y) reprenta la posición de la pantalla donde se quiere imprimir el texto, y en ambos casos cadena representa el texto que se quiere imprimir.

Para definir el estilo del texto se utiliza la función settextstyle(fuente, dirección, tamaño)

La fuente puede tomar los siguientes valores:

NombreValor
DEFAULT_FONT0
TRIPLEX_FONT1
SMALL_FONT2
SAN_SERIF_FONT3
GOTHIC_FONT4

El parámetro direccion puede tomar los valores HORIZ_DIR o VERT_DIR, dependiendo del efecto deseado.

La justificación del texto se puede realizar mediante la función settextjustify(horizontal,vertical), que determina como se distribuye la cadena de texto en relación a la posición actual. horizontal y vertical puedne tomar los siguientesvalores:

ArgumentoConstanteValorJustificación
horizontalLEFT_TEXT0A partir de la izquierda
CENTER_TEXT1Centrada
RIGHT_TEXT0A partir de la derecha
verticalBOTTOM_TEXT0A partir de la abajo
CENTER_TEXT1Centrada
TOP_TEXT0A partir de la arriba

Anterior Home Siguiente



® 2000 Made in 
Bufoland