programacion grafica en c

Upload: tamara18

Post on 18-Jul-2015

1.123 views

Category:

Documents


0 download

TRANSCRIPT

Bismarck Salvador Traa Lpez__________________________________________ UNI

Introduccin a la Programacin grafica en C.Para la mejor comprensin de este tutor hemos realizado un anlisis de las Funciones que se suelen utilizar con mucha frecuencia al programar en el modo grafico de C, dando como resultado la librera conio.h, dos.h, stdlib.h, y evidentemente graphics.h. En este pequeo tutor solo haremos nfasis en estas libreras, puesto que al final del libro se encuentran las dems libreras que comnmente encontramos con frecuencia en el programa. Muchos libros nos marean dndonos conceptos los cuales se aprenden conforme programando; esto no significa, que no sean importan tantees los ejercicios que aqu te enseamos te ayudaran a darte todo el conocimiento as como tambin te los daremos conforme avancemos as que dejemos de hablar y aventurmonos en el mundo de la programacin grafica. Lo primero que debemos saber al realizar una grafica son las dimensiones del ordenador (Monitor) en modo texto las dimensiones de este es 25X80 esto dependiendo de la versin de video instalada. En el modo grafico estas dimensiones cambian dependiendo del tipo de macro de inicializacin se realice(ver Macro modos). Quedando la mas comn de 640X480 modo VGA.

A la hora de desarrollar un programa grfico se debe tener en cuenta los siguientes cuatro puntos: 1. Especificar el fichero o librera graphics.h # include

2. Inicializar el modo grafico correspondiente mediante la Funcin initgraph;Initgraph(&adaptador,&modo,direccin de los archivos bgi);

3. Crear y manipular las figuras graficas./*Desarrollo del programa*/ 4. Restaurar el modo de video antes de salir del programa(restaurar el modo texto) closegraph() o restorecrtmode()

Juan Carlos Gutirrez Barquero____________________________________________

1

Bismarck Salvador Traa Lpez__________________________________________ UNIOtra de las cosas importantes que debemos saber es que Funciones contiene graphics.h

Funciones de Graphics.hEsta librera se encuentra los prototipos de las Funciones que manipulan la parte grfica en el entorno de MS-DOS. Arc bar bar3d circle cleardevice clearviewport closegraph detectgraph drawpoly ellipse fillellipse fillpoly floodfill getarccoords getaspectratio getbkcolor getcolor getdefaultpalette getdrivername getfillpattern getfillsettings getgraphmode getimage getlinesettings getmaxcolor getmaxmode getmaxx getmaxy getmodename getmoderange getpalette getpalettesize getpixel gettextsettings getviewsettings getx gety graphdefaults grapherrormsg graphfreemem graphgetmem graphresult imagesize initgraph installuserdriver installuserfont line linerel lineto moverel moveto outtext outtextxy pieslice putimage putpixel rectangle registerbgidriver registerbgifont restorecrtmode sector setactivepage setallpalette setaspectratio setbkcolor setfillpattern setfillstyle setgraphbufsize setgraphmode setlinestyle setpalette setrgbpalette settextjustify settextstyle setusercharsize setviewport setvisualpage setwritemode textheight textwidth

Es necesario conocer hacerca de los macros y estructuras, entre las estructuras tenemos: arccoordstype fillsettingstype Entre los macros se encuentran: colores drivers enlazar errores fuentes lnea modos put_op trama linesettingstype palettetype textsettingstype viewporttype

Antes de comenzar a programar en modo grafico debemos estudiar lo que son los macros, que son instrucciones que nos ayudaran a realizar de una manera ms efectiva nuestros grficos.

Juan Carlos Gutirrez Barquero____________________________________________

2

Bismarck Salvador Traa Lpez__________________________________________ UNI

Colores :Colores de FondoConstante BLACK BLUE GREEN CYAN RED MAGENTA BROWN LIGHTGRAY DARKGRAY LIGHTBLUE LIGHTGREEN LIGHTCYAN LIGHTRED LIGHTMAGENTA YELLOW WHITE Valor 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Significado Negro Azul Verde Can Rojo Magenta Marrn Gris Claro Gris Oscuro Azul Claro Verde Claro Can Claro Rojo Claro Magenta Claro Amarillo Blanco

Modo de 16 ColoresConstante BLACK BLUE GREEN CYAN RED MAGENTA BROWN LIGHTGRAY DARKGRAY LIGHTBLUE LIGHTGREEN LIGHTCYAN LIGHTRED LIGHTMAGENTA YELLOW WHITE 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Valor Significado Negro Azul Verde Can Rojo Magenta Marrn Gris Claro Gris Oscuro Azul Claro Verde Claro Can Claro Rojo Claro Magenta Claro Amarillo Blanco

Color del modo CGA Juan Carlos Gutirrez Barquero____________________________________________ 3

Bismarck Salvador Traa Lpez__________________________________________ UNI

Nmero Paleta 0 1 2 3

Color 1 CGA_LIGHT GREEN CGA_LIGHT CYAN CGA_GREEN CGA_CYAN

Significado Verde Claro Can Claro Verde Can

Color 2 CGA_LIGHTRED CGA_LIGHTMAGENTA CGA_RED CGA_MAGENTA

Significado Rojo Claro Magenta Claro Rojo Magenta

Color 3 CGA_YELLOW CGA_WHITE CGA_BROWN CGA_LIGHTGRAY

Significado Amarillo Blanco Marrn Gris Claro

Valor asignado: 1 2 3 Nota: Color 0 se reserva para el color de fondo y se asigna con lo funcin setbkcolor, pero los dems colores son fijos. Estas constantes se usan con setcolor.

Colores para las paletas.Constante (CGA) BLACK BLUE GREEN CYAN RED MAGENTA BROWN LIGHTGRAY DARKGRAY LIGHTBLUE LIGHTGREEN LIGHTCYAN LIGHTRED LIGHTMAGENTA YELLOW WHITE Valor 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Constante (EGA/VGA) EGA_BLACK EGA_BLUE EGA_GREEEN EGA_CYAN EGA_RED EGA_MAGENTA EGA_LIGHTGRAY EGA_BROWN EGA_DARKGRAY EGA_LIGHTBLUE EGA_LIGHTGREEN EGA_LIGHTCYAN EGA_LIGHTRED EGA_LIGHTMAGENTA EGA_YELLOW EGA_WHITE Valor 0 1 2 3 4 5 7 20 56 57 58 59 60 61 62 63

Nota: Estas constantes se usan con las Funciones setpalette y setallpalette.el cual veremos en captulos posteriores

Fuentes:

Juan Carlos Gutirrez Barquero____________________________________________

4

Bismarck Salvador Traa Lpez__________________________________________ UNI Fuentes para TextoConstante DEFAULT_FONT TRIPLEX_FONT SMALL_FONT SANS_SERIF_FONT GOTHIC_FONT SCRIPT_FONT SIMPLEX_FONT TRIPLEX_SCR_FONT COMPLEX_FONT EUROPEAN_FONT BOLD_FONT Valor 0 1 2 3 4 5 6 7 8 9 10 Valor Fuente bitmap de 8x8 Fuente escalable de tipo triple Fuente escalable pequea Fuente escalable de tipo sans serif Fuente escalable de tipo gtico Fuente escalable de tipo manuscrito Fuente escalable de tipo manuscrito simple Fuente escalable de tipo manuscrito triple Fuente escalable de tipo complejo Fuente escalable de tipo europeo Fuente escalable en negrita

Direccin del TextoConstante HORIZ_DIR VERT_DIR Valor 0 1 Significado Texto horizontal Texto vertical

Justificacin de Texto en la HorizontalConstante LEFT_TEXT CENTER_TEXT RIGHT_TEXT Valor 0 1 2 Significado Justificar a la izquierda Centrar el texto Justificar a la derecha

Justificacin de Texto en la VerticalConstante BOTTOM_TEXT CENTER_TEXT TOP_TEXT Valor 0 1 2 Significado Justificar debajo Centrar el texto Justificar arriba

Tramas:Tramas predefinidas

Juan Carlos Gutirrez Barquero____________________________________________

5

Bismarck Salvador Traa Lpez__________________________________________ UNIConstante EMPTY_FILL SOLID_FILL LINE_FILL LTSLASH_FILL SLASH_FILL BKSLASH_FILL LTBKSLASH_FILL HATCH_FILL XHATCH_FILL INTERLEAVE_FILL WIDE_DOT_FILL CLOSE_DOT_FILL USER_FILL Valor 0 1 2 3 4 5 6 7 8 9 10 11 12 Significado Rellena con el color de fondo Rellena enteramente Rellena con lneas horizontales: --Rellena con rayas finas: /// Rellena con rayas gruesas: /// Rellena con rayas inversas y finas: \\\ Rellena con rayas inversas y gruesas: \\\ Rellena con lneas cruzadas cuadriculadamente: +++ Rellena con lneas cruzadas diagonalmente: XXXX Rellena con lneas entrelazadas Rellena con lunares bastante distanciados Rellena con lunares poco distanciados Rellena con la trama definida por el usuario

Nota: Todos los tipos de tramas menos EMPTY_FILL usan el color de relleno seleccionado; EMPTY_FILL usa el color de fondo para rellenar.

Driver:Dispositivos GrficosDispositivo/Constante DETECT CGA MCGA EGA EGA64 EGAMONO IBM8514 HERCMONO ATT400 VGA PC3270 Valor 0 1 2 3 4 5 6 7 8 9 10

Lneas:Estilos de LneasConstante SOLID_LINE DOTTED_LINE CENTER_LINE DASHED_LINE USERBIT_LINE Valor 0 1 2 3 4 Significado Lnea continua _______ Lnea hecha con puntos .. Lnea centrada Lnea discontinua _._._._. Lnea definida por el usuario

Nota: El grosor es definido escribiendo NORM_WIDTH para rallas normales y THICK_WIDTH para lneas mas gruesos

Grosores para Lneas

Modos de Escritura

Juan Carlos Gutirrez Barquero____________________________________________

6

Bismarck Salvador Traa Lpez__________________________________________ UNIConstante Grosor NORM_THICK THICK_WIDTH Valor 1 3 Significado Grosor es de 1 pxel Grosor es de 3 pxeles

Constantes COPY_PUT XOR_PUT

Valor 0 1

Significado Pxeles de la lnea sobrescriben los pxeles existentes Pxel de la pantalla son el Resulta do de la operacin OR de los pxeles existentes y los de la lnea

Modos:Modos GrficosDispositivo CGA Modo/Constante CGAC0 CGAC1 CGAC2 CGAC3 CGAHI MCGAC0 MCGAC1 MCGAC2 MCGAC3 MCGAMED MCGAHI EGALO EGAHI A64LO EGA64HI AMONOHI VGALO VGAMED VGAHI ATT400C0 ATT400C1 ATT400C2 ATT400C3 ATT400MED ATT400HI HERCMONOHI PC3270HI IBM8514LO IBM8514HI Cdigo 0 1 2 3 4 0 1 2 3 4 5 0 1 0 1 3 0 1 2 0 1 2 3 4 5 0 0 0 1 Resolucin 320X200 320X200 320X200 320X200 640X200 320X200 320X200 320X200 320X200 640X200 640X480 640X200 640x350 640X200 640X350 640x200 640X200 640x350 640X480 320x200 320x200 320x200 320x200 640x400 640x400 720X348 720X350 640X480 1024X768 Paleta 4 Clores 4 Clores 4 Clores 4 Clores 2 Clores 4 Clores 4 Clores 4 Clores 4 Clores 2 Clores 2 Clores 16 Colores 16 Colores 16 Colores 4 Colores 2 Colores 16 Colores 16 Colores 16 Colores 4 Colores 4 Colores 4 Colores 4 Colores 2 Colores 2 Colores 2 Colores 2 Colores 256 Colores 256 Colores Pagina 1 1 1 1 1 1 1 1 1 1 1 4 2 1 1

MCGA

EGA EGA64 EGAMONO VGA ATT400

1* / 2**2 2 1 1 1 1 1 1 1 2 1

HERC

Si la tarjeta es de 64 K o la tarjeta es de 256 K

Errores:

Juan Carlos Gutirrez Barquero____________________________________________

7

Bismarck Salvador Traa Lpez__________________________________________ UNI Cdigos de ErroresConstante grOk grNoInitGraph grNotDetected grFileNotFound grInvalidDriver grNoLoadMem grNoScanMem grNoFloodMem grFontNotFound grNoFontMem grInvalidMode grError grIOerror grInvalidFont grInvalidFontNum grInvalidDeviceNum grInvalidVersion Cdigo 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -18 Significado Ningn error Grficos no iniciados Ningn adaptador grfico detectado Fichero de dispositivo no encontrado Fichero de dispositivo no vlido No hay memoria para cargar dispositivo No hay memoria para rellenar No hay memoria para usar floodfill Fichero de fuente no encontrado No hay memoria para cargar la fuente Modo grfico no vlido Error grfico Error grfico de Entrada/Salida Fichero de fuente no vlido Nmero de fuente no vlido Nmero de dispositivo no vlido Nmero de versin no vlido

Put_op:Operaciones con putimageConstante COPY_PUT XOR_PUT OR_PUT AND_PUT NOT_PUT Valor 0 1 2 3 4 Significado Sobrescribir los pxeles existentes Operacin OR Exclusivo con los pxeles Operacin OR Inclusivo con los pxeles Operacin AND con los pxels Invertir la imagen

Nota: Estas operaciones se usan exclusivamente con la funcin putimage. El cual veremos en captulos posteriores.

Mtodos de Inicializacin del modo grafico.

Juan Carlos Gutirrez Barquero____________________________________________

8

Bismarck Salvador Traa Lpez__________________________________________ UNIAntes de conocer los mtodos de inicializacin debemos conocer la funcin initgraph la cual nos permitir realizar grficos. Funcin initgraph void far initgraph(int far *driver, int far *modo, int far *path); Esta funcin es usada para cargar o validar un dispositivo grfico y cambiar el sistema de vdeo a modo grfico. La funcin initgraph debe ser llamada antes de cualesquier Funcines que generan una salida grfica sean usadas. Existen varios valores a ser usados para el argumento *driver. Si *driver es asignado a DETECT, 0, la funcin detectgraph es llamada, y un dispositivo y modo grfico apropiados son seleccionados. Asignando a *driver cualquier otro valor predefinido inicia la carga del dispositivo grfico correspondiente. Existen varios valores a ser usados para el argumento *modo. Estos valores deberan corresponder al dispositivo especificado en el argumento *driver. El argumento *path especificad el directorio donde los dispositivos grficos estn localizados. La funcin initgraph buscar el dispositivo primeramente en este directorio. Si no es encontrado, la funcin buscar en el directorio de inicio. Cuando el argumento *path es NULL, solamente el directorio de inicio es buscado. Otra forma para evitar cargando el dispositivo desde el disco cada vez que el programa es ejecutado es ligarlo o enlazarlo al dispositivo apropiado en un programa ejecutable. La funcin initgraph no retorna ningn valor. Sin embargo, cuando la funcin initgraph es llamada, el cdigo de error interno es activado. Si la funcin initgraph termina con xito, el cdigo es asignado un 0. Si no, el cdigo es asignado as: -2 grNotDetected La tarjeta grfica no se encontr -3 grFileNotFound El fichero del dispositivo no se encontr -4 grInvalidDriver El fichero del dispositivo es invlido -5 grNoLoadMem No hay suficiente memoria para cargar el dispositivo Ejemplo: #include #include void main() { int driver = EGA; int modo = EGAHI; initgraph( &driver, &modo, C:\\TC20\\BIN ); circle( 300, 200, 80 ); getch(); /* Pausa */ closegraph(); getch(); } Existen diferentes mtodos de inicializacin pero en este pequeo tutorial trataremos dos que suelen ser los ms utilizados hoy en da.

1. Mtodo de inicializacin del modo grafico a prueba de errores. Juan Carlos Gutirrez Barquero____________________________________________ 9

Bismarck Salvador Traa Lpez__________________________________________ UNI

#include # include # include void main() { int driver = VGA; int modo = VGAHI; int resultado; initgraph(&driver,&modo,"c:\\tc20\\bin"); resultado=graphresult(); if(resultado!=grOk) { getch(); exit(0); } getch(); } cuerpo del programa

2. Mtodo de inicializacin rpido del modo grafico.#include void main() { int driver = DETECT,modo; initgraph(&driver,modo, c:\\tc20\\bin); cuerpo del programa driver: Es la direccin de la variable que contiene el cdigo del tipo de de driver o adaptador que tiene la computadora. modo: Es la direccin de la variable que contiene el cdigo del modo en que se podr adaptar. c:\\tc20\\bin: Es el directorio donde se encuentra el cdigo del manejador, puede ser camino relativo o absoluto. graphresult():Regresa el cdigo error de la ultima llamada a una funcin grafica de turbo c un valor de 0 significa que no hubo error. grOk : regresa el cdigo de error de la funcin graphresult(). DETECT: Dispositivo grafico de auto deteccin del la tarjeta de video y del modo grafico.

Qu son los primitivos grficos?Juan Carlos Gutirrez Barquero____________________________________________ 10

Bismarck Salvador Traa Lpez__________________________________________ UNIDefinicin. Un primitivo grfico es un elemento fundamental de dibujo en un paquete grafico tal como un punto, lnea, o circulo; puede ser un carcter, o puede ser una operacin tal como relleno, coloreado o trasferido de la imagen. C cuenta con 5 grupos de primitivos grficos.

Figuras geomtricas: Dibujan las figuras de la geometra clsica: lneas,crculos, rectngulos, arcos, polgonos etc.

Relleno: tiene dos formas de realizarse. El primero es con polgonos, donde sedefinen los vrtices del polgono a ser rellenado segunda es una operacin grafica que busca algortmicamente las fronteras de la regin del relleno.

Rasterop: Es una operacin grafica que copia el rea de una imagen para luegodibujarla en cualquier regin de la pantalla.

Grficas Matemticas: Dibujan los primitivos barras y sectores para conseguirdibujar las herramientas del sector.

Texto Grfico: Sirve para escribir texto en modo grafico, utilizando diferentesfuentes. Figuras geomtricas: LINEAS. void far line(int x1, int y1, int x2, int y2); Esta funcin es usada para conectar dos puntos con una lnea recta. El primer punto es especificado por los argumentos x1 e y1. El segundo punto es especificado por los argumentos x2 e y2. La lnea se dibuja usando el estilo de lnea actual, el grosor, y el color actual. La posicin del cursor grfico no es afectada por la funcin line.

La funcin line() no retorna ningn valor.

Ejemplo:

Juan Carlos Gutirrez Barquero____________________________________________

11

Bismarck Salvador Traa Lpez__________________________________________ UNI

#include #include void main() { int driver = EGA,modo = EGAHI; initgraph( &driver, &modo, "c:\\tc20\\bin" ); line( 20, 40, 350, 100 ); line( 400, 30, 50, 250 ); getch(); closegraph(); } CIRCULOS. void far circle(int x, int y, int radio); Esta funcin se utiliza para dibujar un crculo. Los argumentos x e y definen el centro del crculo, mientras que el argumento radio define el radio del crculo. El crculo no es rellenado pero es dibujado usando el color actual.

El grosor de la circunferencia puede ser establecido por la funcin setlinestyle; sin embargo, el estilo de la lnea es ignorado por la funcin circle. La funcin circle no retorna ningn valor. Ejemplo: #include #include void main() { int driver = EGA; int modo = EGAHI; initgraph( &driver, &modo, "C:\\tc20\\BIN" ); circle( 300, 200, 80 ); getch(); /* Pausa */ closegraph(); }

Juan Carlos Gutirrez Barquero____________________________________________

12

Bismarck Salvador Traa Lpez__________________________________________ UNI

RECTANGULOS.void far rectangle(int izquierda,int superior, int derecha, int inferior); Esta funcin dibujar un rectngulo sin rellenar su interior usando el color actual. La esquina superior izquierda del rectngulo est definida por los argumentos izquierdos y superiores. Estos argumentos corresponden a los valores x e y de la esquina superior izquierda. Similarmente, los argumentos derecha e inferior definen la esquina inferior derecha del rectngulo. El permetro del rectngulo es dibujado usando el estilo y grosor de lnea actuales.

La funcin rectangle() no retorna ningn valor. Ejemplo: #include #include void main() { int driver = EGA,modo = EGAHI; initgraph( &driver, &modo, "C:\\tc20\\bin" ); rectangle( 20, 20, 400, 300 ); getch(); /* Pausa */ closegraph(); }

ARCOSvoid far arc(int x, int y,int comienzo_angulo, int final_angulo, int radio); Esta funcin crear un arco circular. El arco tiene como centro el punto especificado por los argumentos x e y, y es dibujado con el radio especificado: radio. El arco no est rellanado, pero es dibujado usando el color actual. El arco comienza al ngulo especificado por el argumento comienzo_angulo y es dibujado en la direccin contraria al de las agujas del reloj hasta llegar al ngulo especificado por el argumento final_angulo. La funcin arc usa el este (extendindose hacia la derecha del centro del arco en la direccin horizontal) como su punto de 0 grados. La funcin setlinestyle puede usarse para establecer el grosor del arco. La funcin arc, sin embargo, ignorar el argumento trama de la funcin setlinestyle.

Juan Carlos Gutirrez Barquero____________________________________________

13

Bismarck Salvador Traa Lpez__________________________________________ UNI

La funcin arc no retorna ningn valor. Ejemplo: #include #include void main() { int driver = EGA,modo = EGAHI,radio; initgraph( &driver, &modo, "C:\\tc20\\bin" ); for( radio = 25; radio < 175; radio += 25 ) arc( 320, 175, 45, 135, radio ); getch(); /* Pausa */ closegraph(); }

PIXELES.void far putpixel(int x, int y, int color); Esta funcin es usada para colocar a un pxel en una posicin en particular la cual es cuestionada por los argumentos x e y. El argumento color especfico el valor del color del pxel. La funcin putpixel no retorna ningn valor. Ejemplo: #include #include void main() { int driver = EGA,modo = EGAHI,t; initgraph( &driver, &modo, c:\\tc20\\bin ); for( t=0; t