miércoles, 11 de abril de 2012

Tema 3


Funciones básicas de graphics.h.

 Función setbkcolor
 void far setbkcolor(int color);

Esta función es usada para asignar el color de fondo al valor del color de fondo especificado por el argumento color. Existen varios valores para ciertos colores de fondo.

La función setbkcolor no retorna ningún valor.

Ejemplo:

#include <graphics.h>
#include <conio.h>
void main() {
int driver = EGA;
int modo = EGAHI;
initgraph( &driver, &modo, “C:\\TC20\\BIN” );
setbkcolor( 4 );
circle( 300, 150, 50 );
getch(); /* Pausa */
closegraph();
getch();
}

Función getbkcolor.
  int far getbkcolor(void);                                                                                                   

Esta función es usada para obtener el valor del color de fondo actual. El color de fondo, por defecto, es el color 0. Sin embargo, este valor puede cambiar con una llamada a la función setbkcolor. Existen varios valores para ciertos colores de fondo.

La función getbkcolor retorna el valor del color de fondo actual.

Ejemplo:

#include <graphics.h>
#include <conio.h>
#include <stdio.h>
void main() {
int driver = EGA,modo = EGAHI,color;
initgraph( &driver, &modo, "C:\\tc20\\BIN" );
setbkcolor( 4 );
circle( 300, 150, 50 );
color = getbkcolor();
getch(); /* Pausa */
closegraph();
printf( "Color de fondo: %d\n", color );
getch();
}

void far setcolor(int color)

Esta función coloca el atributo color es decir escoge un color  entre 0 y 15 o su equivalente en inglés (ver pagina 3  Modo de 16 colores) todo lo que se dibuje después de esta instrucción tendrá el color establecido por la función setcolor el valor de esta es función es WHITE.

Esta función no devuelve ningún valor.

Ejemplo.

 # include <graphics.h>
# include <dos.h>
# include <stdlib.h>
# include <conio.h>
void main(){
int driver=DETECT,modo,i;
initgraph(&driver,&modo,"c:\\tc20\\BIN");
i=0;
do
{
setcolor(i);
circle(random(639),random(479),random(i+8));/*Random definida en stdlib*/
delay(30000);  /*Detiene la ejecución del programa durante 30000 milisegundos*/
i=(i<16)?i:0;
i++;
}while(!kbhit());
}

Función cleardevices
void far cleardevice(void);

Esta función es usada para despejar una pantalla gráfica. La función cleardevice usa el color de fondo actual, como es establecido por la función setbkcolor, para rellenar la pantalla. La posición del cursor gráfico es la esquina superior izquierda de la pantalla - posición (0,0) - después de que la pantalla haya sido borrado.

La función cleardevice no retorna ningún valor.

Ejemplo:

#include <graphics.h>
#include <conio.h>
void main() {
int driver = EGA;
int modo = EGAHI;
int relleno, color;
initgraph( &driver, &modo, "C:\\tc20\\BIN" );
relleno = 1;
color = 1;
setlinestyle( SOLID_LINE, relleno, THICK_WIDTH );
circle( 300, 200, 80 );
getch(); /* Pausa */
setbkcolor( color );
cleardevice();
setlinestyle( SOLID_LINE, relleno, THICK_WIDTH );
circle( 400, 200, 20 );
getch(); /* Pausa */
closegraph();
getch();
}

Función getmaxx
int far getmaxx(void);

Esta función es usada para obtener la coordenada máxima de la pantalla en la dirección horizontal. Este valor suele ser la resolución horizontal máxima menos 1.

La función getmaxx retorna la coordenada máxima de la pantalla en la dirección horizontal.

Ejemplo:

#include <graphics.h>
#include <conio.h>
#include <stdio.h>
void main() {
int driver = EGA,modo = EGAHI,x_max;
initgraph( &driver, &modo, "C:\\TC20\\BIN" );
x_max = getmaxx();
closegraph();
printf( "X máxima: %d\n", x_max );
getch();
}

Función getmaxy
int far getmaxy(void);

Esta función es usada para obtener la coordenada máxima de la pantalla en la dirección vertical. Este valor suele ser la resolución vertical máxima menos 1.

La función getmaxy retorna la coordenada máxima de la pantalla en la dirección vertical.
Ejemplo:

#include <graphics.h>
#include <conio.h>
#include <stdio.h>
void main() {
int driver = VGA;
int modo = EGAHI;
int x_max, y_max;
initgraph( &driver, &modo, “C:\\TC20\\BIN” );
x_max = getmaxx();
y_max = getmaxy();
closegraph();
printf( "X máxima: %d\tY máxima: %d\n", x_max, y_max );
getch();
}

Ø  Rellenos

Es el proceso de rellenar una región de la pantalla con un patrón o color. Turbo C utiliza dos métodos para definir la región de rellenos. El primero relleno de polígonos, usa la lista de vértices del polígono para calcular la geometría del interior, El segundo relleno es por el método de inundación, busca desde un punto inicial llamado la semilla en todas las direcciones para encontrar una frontera que encierre la regio. La frontera se reconoce como el valor del píxel que tiene.

Antes de estudiar los dos métodos estudiaremos la función setfillstyle que será de gran importancia a la hora de realizar los dos tipos de rellenado y bar que es una función similar a rectangle.

Función bar

void far bar(int izquierda, int superior, int derecha, int inferior);

Esta función dibujará una barra rectangular y rellenada de dos dimensiones. La esquina superior izquierda de la barra rectangular 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 de la barra. La barra no tiene borde, pero es rellenada con la trama de relleno actual y el color de relleno como es establecido por la función setlinestyle.

La función bar no retorna ningún valor.

Ejemplo:

#include <graphics.h>
#include <conio.h>
void main() {
int driver = EGA,modo = EGAHI, x, y, color,fill;
initgraph( &driver, &modo, "C:\\tc20\\BIN" );
x = 20;
y = 20;
color = 1;
fill = 1;
do {
setfillstyle( fill, color );
bar( x, y, x+40, 320 );
x += 40;
y += 10;
color = (color+1) % 16;
fill = (fill+1) % 12;
} while( x < 620 );
getch(); /* Pausa */
closegraph();
}
El patrón  de relleno se define con las Funciónes setfillstyle y  setfillpattern

Función setfillstyle
 void far setfillstyle(int trama, int color);

Esta función es usada para seleccionar una trama predefinida y un color de relleno. El argumento trama especifica la trama predefinida, mientras que el argumento color especifica el color de relleno. Existen trece valores ya definidos para tramas. Sin embargo, la trama USER_FILL (valor 12) no debería usarse para asignar una trama definida por el usuario. En su lugar, se debería usar la función setfillpattern.

La función setfillstyle no retorna ningún valor.

Ejemplo:

#include <graphics.h>
#include <conio.h>
void main() {
int driver = EGA,modo = EGAHI;
initgraph( &driver, &modo, "c:\\tc20\\bin" );
setfillstyle( LTSLASH_FILL, 6 );
bar( 50, 50, 350, 300 );
getch(); /* Pausa */
closegraph();
}

LTSLASH_FILL es un estilo de relleno si desea estudiarlos se encuentran en el libro(Ver pagina # 5 ).

Función setfillpattern

void far setfillpattern(char far *trama, int color);

Esta función es usada para seleccionar una trama de relleno definido por el usuario. El argumento *trama apunta a una serie de ocho bytes que representa una trama de relleno de bits de 8 x 8. Cada byte representa una fila de ocho bits, donde cada bit está encendido o no (1 ó 0). Un bit de 0 indica que el píxel correspondiente será asignado el color de relleno actual. Un bit de 0 indica que el píxel correspondiente no será alterado. El argumento color especifica el color de relleno que será usado para la trama.

La función setfillpattern no retorna ningún valor.

Ejemplo:

#include <graphics.h>
#include <conio.h>
void main() {
int driver = EGA,modo = EGAHI;
char trama1[8] = { 0x33, 0xEE, 0x33, 0xEE, 0x33, 0xEE, 0x33, 0xEE };
char trama2[8] = { 0x0A, 0xF0, 0xF0, 0x0A, 0x0A, 0xF0, 0xF0, 0x0A };
initgraph( &driver, &modo, "C:\\tc20\\bin" );
bar( 50, 50, 150, 150 );
setfillpattern( trama1, 9 );
bar( 160, 50, 260, 150 );
setfillpattern( trama2, 4 );
bar( 105, 160, 205, 260 );
getch(); /* Pausa */
closegraph();
}

1. Relleno por medio de un polígonos.

void far fillpoly(int numpuntos, int far *puntos);

Esta función es usada para crear un polígono rellenado. El argumento numpuntos es usado para definir el número de puntos en el polígono. Al contrario que la función drawpoly, la función automáticamente cierra el polígono. El argumento *puntos apunta a un array de números de longitud numpuntos multiplicado por 2.

Los dos primeros miembros del array identifica las coordenadas x e y del primer punto, respectivamente, mientras que los dos siguientes especifican el siguiente punto, y así sucesivamente. La función fillpoly dibuja

el perímetro del polígono con el estilo de línea y color actuales. Luego, el polígono es rellenado con la trama de relleno y color de relleno actuales.

La función fillpoly no retorna ningún valor.

Ejemplo:

#include <graphics.h>
#include <conio.h>
#include <stdio.h>
void main() {
int driver = EGA,modo = EGAHI,trama, color;
int puntos[6] = { 300, 50, 500, 300, 100, 300 };
initgraph( &driver, &modo, "C:\\tc20\\bin" );
trama = SLASH_FILL;
for(color=0;color<=15;color++)
{
setfillstyle( trama, color );
fillpoly( 3, puntos );
getch();
}
getch(); /* Pausa */
closegraph();
}

/*Este programa te muestra los diferentes colores con una misma trama trata de modificarlo para que obtengas todas las tramas con todos los colores*/

2. Relleno por el método de inundación.

void far floodfill(int x, int y, int borde);

Esta función es usada para rellenar un área cerrado con el color de relleno y trama de relleno actuales. Los argumentos x e y especifican el punto de comienzo para el algoritmo de relleno. El argumento borde especifica el valor del color del borde del área. Para que la función fillpoly Funcione como es esperado, el área a ser rellenado debe estar rodeada por el color especificado por el argumento borde. Cuando el punto especificado por los argumentos x e y se encuentra dentro del área a ser rellenada, el interior será rellenado. Si se encuentra fuera del área, el exterior será rellenado.

Nota: Esta función no Funciona con el driver IBM-8514.La función floodfill no retorna ningún valor.

Ejemplo:

#include <graphics.h>
#include <conio.h>
#include <stdio.h>
void main() {
int driver = EGA,modo = EGAHI,trama, color;
int puntos[8] = { 300, 50, 500, 300, 100, 300, 300, 50 };
initgraph( &driver, &modo, "C:\\tc20\\bin" );
setcolor( 10 );  /*verde*/
drawpoly( 4, puntos );
trama = SLASH_FILL;
for(color = 0;color<=15;color++)
{
setfillstyle( trama, color );
floodfill( 400, 250, 10 );
getch();
}
getch(); /* Pausa */
closegraph();
}

Archivo a descargar: Tema 3

Archivos a descargar: Graficos

Ejercicos a realizar opcional no es obligatorio, no es tarea, es solo un reto

Relog Analogo Sencillo
Barras de diferentes colores
Barra en 3d 
Estrellas 
Tic Tac 
Crystal

Videos sobre Programacion Grafica en C
Video 1

8 comentarios: