Gráficos Usando graphics.h

De ChuWiki

Activando el Modo Gráfico[editar]

Antes que nada debemos activar el modo gráfico. De acuerdo al compilador que usemos tendremos maneras distintas de hacerlo. Si se trata de Borland C++ 3.1 debemos dirijirnos a Options->Linker->Libraries y allí tildar la opción "Graphics library". En el caso de tratarse de Borland C++ 4.5 ó superior deberemos hacer un click con el botón derecho del mouse sobre algún lugar desocupado de la pantalla y al aparecer el menú contextual, tenemos que hacer un click sobre "TargetExpert", con lo cual aparecerá una ventana en la que seleccionaremos "Application [.exe]" en la sección "Target Type"; luego de esto debemos seleccionar "DOS (Standard)" en la sección "Platform" y finalmente debemos marcar el casillero correspondiente a "BGI" en la sección "Standard Libraries".

Iniciando el Modo Gráfico[editar]

Para inciar el Modo Gráfico debemos escribir las siguientes sentencias:

int gdriver=DETECT, gmode;
initgraph(&gdriver,&gmode,"C:\\BORLANDC\\BGI"); //Inicia el Modo Gráfico.

Con esto estamos diciéndole al compilador que autodetecte el driver correspondiente a nuestra tarjeta gráfica, que el modo gráfico sea el predeterminado, y que el path hacia la carpeta "BGI" (donde se encuentran entre otras cosas los drivers de video y las fuentes) es "C:\BORLANDC\BGI". Con esto tenemos nuestro modo gráfico iniciado. La manera de terminar el modo gráfico es escribir la sentencia siguiente:

closegraph();

Conociendo algunas funciones gráficas[editar]

Es conocida la pobreza de las funciones gráficas incluidas en "graphics.h". A pesar de esto, vale la pena conocerlas y manejarlas correctamente. Para describirlas, es necesario aclarar que en su mayoría tratan con coordenadas (iniciales y finales) compuestas por un par ordenado al estilo (eje_x , eje_y). Conveniremos en que las coordenadas iniciales serán x e y, y las coordenadas finales serán x2 e y2. De esta manera describiremos la función y a continuación haremos un ejemplo sencillo. Comencemos:


Dibujar un Circulo

circle(x, y, angulo_inicial, angulo_final, radio);

Aquí tenemos que para hacer el círculo completo necesitamos que el ángulo inicial sea igual a 0 y el ángulo final a 360. Creo que no hace falta describir para qué se utiliza el radio. A modo de ejemplo tendremos:

circle(320, 240, 0, 360, 100);

En este ejemplo dibujamos un círculo en el centro de la pantalla (considerando una resolución de 640x480) con un radio igual a 100.


Dibujar una Elipse

ellipse(x, y, angulo_inicial, angulo_final, radio_en_x, radio_en_y);

Al dibujar la elipse, necesitamos diferir entre radio en x y radio en y, ya que si fuesen iguales sería un círculo. Ejemplo:

ellipse(320, 240, 0, 360, 50, 100);

En este ejemplo dibujamos la elipse en el centro de la pantalla con un radio en x igual a 50 y un radio en y igual a 100.


Dibujar una Línea

line(x, y, x2, y2);

La línea sólo necesita especificar las coordenadas iniciales y las finales. Como ejemplo:

line(300, 200, 400, 300);

Entonces dibujamos nuestra línea entre las coordenadas iniciales (300,200) y (400,300).


Dibujar un Rectángulo

rectangle(x, y, x2, y2);

Al igual que la línea sólo necesitamos las coordenadas iniciales y las finales. Como ejemplo:

rectangle(0, 0, 100, 200);

Es necesario aclarar que con este comando es posible crear cuadrados tomando como base que las distancias numéricas entre x y x2 y entre y e y2 deben ser iguales.


Setear el Color de Línea

setcolor(color_elegido);

El color elegido debe encontrarse entre 0 y 15 en una paleta de 16 colores. Por ejemplo, 0 es negro, 1 es azul, 2 es verde claro, 4 es rojo, 9 es celeste, 15 es blanco, etc. Como ejemplo:

setcolor(4);
rectangle(100, 100, 200, 200);

En este ejemplo hicimos un cuadrado de color rojo.


Dibujar una Barra

bar(x, y, x2, y2);

Aquí sencillamente dibujamos un rectángulo relleno, ya que la sintaxis de bar es idéntica a la de rectangle y funciona de igual manera.

setcolor(2);
bar(0, 0, 200, 20);

En el ejemplo dibujamos una barra de 200 de largo y 20 de ancho partiendo de (0,0). La barra es de color verde claro.


Escribir un Texto posicionado según Coordenadas

outtextxy(x, y, "Este es un texto cualquiera.");

Al escribir este comando sólo debemos dar las coordenadas iniciales a partir de las cuales se escribirá el texto, y el texto propiamente dicho. A modo de ejemplo:

outtextxy(200, 200, "Texto de Prueba");

Así, escribimos el texto "Texto de Prueba" a partir de las coordenadas (200,200).


Setear Características del Texto

settextstyle(fuente, direccion, tamaño);

La fuente que acepta va desde 0 a 4, donde 0 es la letra por defecto y 4 es gótica. La dirección puede ser 0 ó 1. 0 es texto con dirección horizontal y 1 con dirección vertical. El tamaño varía desde 1 a 15. Como ejemplo:

settextstyle(4,0,6);
outtextxy(200, 100, "Texto de Prueba");

En el ejemplo escribimos el texto "Texto de Prueba" en la posición (200,100) con una fuente gótica, dirección horizontal y tamaño 6.


Limpiar Pantalla

cleardevice();

Aquí cleardevice() se utiliza en forma análoga a clrscr().


Obtener Coordenadas Máximas

int maxx=getmaxx();
int maxy=getmaxy();

En la sintaxis y a su vez ejemplo, lo que estamos haciendo es obtener las coordenadas máximas sobre el eje x y el eje y. Asignamos estos valores a maxx y a maxy para utilizarlos luego.

Haciendo un Programa Sencillo[editar]

Vamos a hacer un pequeño programa que nos permita crear algo así como un salvapantallas. Utilizaremos entre otras, las funciones random(int valor), que devuelve un entero aleatorio que va desde 0 hasta el valor que especifiquemos y la función kbhit(), que detecta la pulsación de una tecla. A esta última función la utilizaremos como condición para salir del programa.

#include <conio.h>  //De aquí utilizaremos la función kbhit() 
#include <stdlib.h> //De aquí sacaremos la función random()
#include <dos.h> //Usaremos esta librería por la función delay(int valor) que nos permite            
                 //establecer un retardo en milisegundos.
#include <graphics.h> //Esta es la librería que nos permite usar gráficos.

void main()
{
 int gdriver=DETECT, gmode, contador=0;
 initgraph(&gdriver,&gmode,"C:\\BORLANDC\\BGI");  //Iniciamos el modo gráfico.
 do
   {
    setcolor(random(15));   //Establecemos un color aleatorio
    line(random(640),random(480),random(640),random(480)); //Establecemos coordenadas aleatorias.
    setcolor(random(15));
    rectangle(random(640),random(480),random(640),random(480));
    setcolor(random(15));
    ellipse(random(640),random(480),0,360,random(100),random(100));
    contador+=1;   //Por cada vuelta incrementamos contador en 1.
    if(contador%100==0) { cleardevice(); }   //Si contador es múltiplo de 100, limpia la pantalla.
    delay(100);    //Establecemos un retardo de 100 milisegundos al dibujar las figuras. 
   }
 while(!kbhit());  //Si se pulsa alguna tecla, salimos del programa.
 closegraph();     //Cerramos el modo gráfico.
}


Espero que haya sido de utilidad este "Mini-Manual", y debo aclarar que sólo es un esbozo. A mí me hubiera servido algo así hace unos meses. Intentaré mejorarlo en cuanto pueda.