Anterior | Home | Siguiente |
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:
DETECT | 0 (autodetección) |
CGA | 1 |
MCGA | 2 |
EGA | 3 |
EGA64 | 4 |
EGAMONO | 5 |
IBM8514 | 6 |
HERCMONO | 7 |
ATT400 | 8 |
VGA | 9 |
PC3270 | 10 |
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áfico | Modo Gráfico | Columnas | ||
Valor | x Filas | Paleta | ||
CGA | CGAC0 | 0 | 320x200 | C0 |
CGAC1 | 1 | 320x200 | C1 | |
CGAC2 | 2 | 320x200 | C2 | |
CGAC3 | 3 | 320x200 | C3 | |
CGAHI | 4 | 640x200 | 2 colores | |
VGA | VGALO | 0 | 640x200 | 16 colores |
VGAMED | 1 | 640x350 | 16 colores | |
VGAMED | 2 | 640x480 | 16 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 Error | Identificador de la constante | Suceso |
0 | grOk | No hubo error |
-1 | grNoInitGraph | (BGI) modo gráfico no instalado (use initgraph) |
-2 | grNotDetected | Hardware 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 */ }
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.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):
Constante | Valor | Fondo | Frente | Color |
BLACK | 0 | si | si | negro |
BLUE | 1 | si | si | azul |
GREEN | 2 | si | si | verde |
CYAN | 3 | si | si | cian |
RED | 4 | si | si | rojo |
MAGENTA | 5 | si | si | magenta |
BROWN | 6 | si | si | marrón |
LIGHTGRAY | 7 | no | si | gris claro |
DARKGRAY | 8 | no | si | gris oscuro |
LIGHTBLUE | 9 | no | si | azul claro |
LIGHTGREEN | 10 | no | si | verde claro |
LIGHTCYAN | 11 | no | si | cian claro |
LIGHTRED | 12 | no | si | rojo claro |
LIGTHMAGENTA | 13 | no | si | magenta claro |
YELLOW | 14 | no | si | amarillo |
WHITE | 15 | no | si | blanco |
BLINK | 128 | no | *** | 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.
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_LINE | Línea Sólida |
DOTTED_LINE | Línea Punteada |
CENTER_LINE | Línea Centrada |
DASHED_LINE | Línea Sólida |
USERBIT_LINE | Lí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
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:
Nombre | Valor |
DEFAULT_FONT | 0 |
TRIPLEX_FONT | 1 |
SMALL_FONT | 2 |
SAN_SERIF_FONT | 3 |
GOTHIC_FONT | 4 |
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:
Argumento | Constante | Valor | Justificación |
horizontal | LEFT_TEXT | 0 | A partir de la izquierda |
CENTER_TEXT | 1 | Centrada | |
RIGHT_TEXT | 0 | A partir de la derecha | |
vertical | BOTTOM_TEXT | 0 | A partir de la abajo |
CENTER_TEXT | 1 | Centrada | |
TOP_TEXT | 0 | A partir de la arriba |
Anterior | Home | Siguiente |
® 2000 Made in Bufoland