Gráficos en C (usando biblioteca g2)

El lenguaje C no provee de herramientas para realizar salida gráfica en un programa. Sin embargo existen una infinidad de bibliotecas, realizadas por terceros que proveen de estas facilidades. Dadas las peculiaridades de cada sistema operativo para manipular el entorno gráfico, es muy dificil mantener la portabilidad de un programa cuando se utilizan rutinas de graficación. Dado que este curso pretende enseñar a programar en C en forma independiente del sistema operativo, elegimos la biblioteca g2.

La biblioteca g2 provee funciones para graficar en 2D desde un programa en lenguaje C (Fortran o Perl). Se distribuye en forma gratuita y se puede compilar en diversos sitemas operativos (dado que está escrita en ANSI C). Además de la visualización en el entorno gráfico, también permite generar archivos PNG o Postscript (con ayuda de otras bibliotecas como gd, también de distribución gratuita), el formato GIF ya no es soportado. (Acceso a toda la documentación)

Ejemplo de uso

El procedimiento para graficar es muy similar la que se utiliza con archivos.

Un ejemplo muy simple:


#include <stdio.h>
/* el header genérico de la biblioteca */
#include <g2.h>  
/* el header específico para manipular ventanas de X11 */
#include <g2_X11.h>

int main()
{
   int d; /* para identificar el dispositivo */
   d = g2_open_X11(100,100); /* abre una ventana de 100 x 100, referenciada por d */
   g2_line(d, 10, 10, 90, 90); /* dibuja una linea desde (10,10) hasta (90,90) */
   getchar();                  /* espera antes de cerrar la ventana */
   g2_close(d);                /* cierra el dispositivo (ventana) */
   return 0;
}

Compilación

Dado que están involucradas varias bibliotecas en la generación de gráficos, la linea de compilación requiere de varias opciones. Algunas ya las hemos visto con anterioridad.

cc -O2 -I/usr/X11R6/inclulde -I/usr/local/include simple_X11.c -L/usr/X11R6/lib -L/usr/local/lib -lg2 -lX11 -lm -o simple_X11

Resulta engorroso tener que escribir cada vez todas estas opciones. Para esto se utliza un archivo de compilación conocido como Makefile.

CC = gcc

CFLAGS = -O2  -I/usr/X11R6/include -I/usr/local/include
LDFLAGS = -L/usr/local/lib -L/usr/X11R6/lib -lg2 -lm -lX11 -lgd

all:	simple_X11

simple_X11:  simple_X11.c
	$(CC) $(CFLAGS) simple_X11.c $(LDFLAGS) -o $@

clean:
	-rm simple_X11 

Una vez realizado el archivo, solo se necesita ejecutar el comando make y el programa simple_X11.c será compilado generando el ejecutable simple_X11.

El Makefile debe estar en el mismo directorio donde se encuentra el archivo simple_X11.c

En el directorio /usr/local/src/g2_0.49a/demo/ se pueden encontrar varios ejemplos de uso de la biblioteca g2 junto con un Makefile para compilarlos a todos.