inicio anterior siguiente

Generación de imágenes usando GD

Para ilustrar el uso de la libreria GD construiremos un pequeño "juego", llamado Kill Nikita y que trata de disparar con el Mouse a la Femme Nikita.
El juego se basa en un CGI que recibe como parametros las coordenadas del click y dibuja un círculo rojo en aquellas coordenadas.
El código del programa se lista a continuación

bajar
#include 
#include "gd.h"
#include "gdok.c"
#include "cgiforms.h"

int main(void)
{

        int  i;    
	FILE *in;           /* Archivo Gif de Entrada  */	
	gdImagePtr im_out;  /* Imagenes de entrada y salida */

        char lpzX[5];       /* coordenadas del disparo */
        char lpzY[5];
        int  X = 0;   int  Y = 0;


	gdImagePtr brush;   /* pincel y colores */
	int rojo;  int blanco;



        formPideVariable( "x",lpzX,4);   /* lee las coordenadas */
        formPideVariable( "y",lpzY,4);

        if (lpzX[0])
        {
           X = atoi(lpzX);
        }

        if (lpzY[0])
        {
           Y = atoi(lpzY);
        }

	in = fopen("nikita.gif", "rb");   /* crea el gif a partir de uno existente */
	im_out = gdImageCreateFromGif(in);

	rojo   = gdImageColorAllocate(im_out, 255, 0, 0);  /* crea los colores */
	blanco = gdImageColorAllocate(im_out, 255, 255, 255);        


        if ( (X > 0) && (Y > 0) )                         /* Si hay disparo */
        {
           gdImageArc(im_out, X, Y, 15, 15, 0, 360, rojo);  /* Dibuja el disparo */
           gdImageArc(im_out, X, Y, 14, 14, 0, 360, rojo);   /* Lo pinta */
           gdImageArc(im_out, X, Y, 13, 13, 0, 360, rojo);   
           for ( i=12;i>10;i--)
           {
              gdImageArc(im_out, X, Y, i, i, 0, 360, blanco);
           }
           for ( i=10;i>0;i--)
           {
              gdImageArc(im_out, X, Y, i, i, 0, 360, rojo);
           }

        }


        printf("Content-type: image/gif\n\n");   /* Headers */
	gdImageGif(im_out, stdout);              /* Salida Estandard */

	fclose(in);                     /* cierra archivos */
	gdImageDestroy(im_out);         /* libera memoria */


	return 0;
}


Como se observa se han usado las rutinas de la librería GD para dibujar el disparo. Hemos usado además otro cgi que lanza el có:digo HTML y usa un form para poder pasar las coordenadas a una segunda llamda a sí mismo.
La forma de usar el form es
<form method=get action=nikita.cgi><input type=image src="shownikita.cgi?x=&y="width=181 height=310 border=0>

No nos detendremos a analizar las rutinas GD ya que estas vienen bastante bien documentadas con la librería.

Kill Nikita

 

inicio anterior siguiente