lunes, 16 de abril de 2012

Tema 4


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();
}

Ø  Funciónes de coordenadas relativas

Entre ellas tenemos las Funciónes moveto, moverel, lineto, linerel, getx, gety. Estudiaremos cada una de ellas para afianzar mas conocimientos.

Función moveto.

void far moveto(int x, int y);

Esta función es usada para colocar el cursor gráfico al punto especificado por los argumentos x e y. Ya que el cursor es movido desde su posición anterior al punto especificado por los argumentos x e y, no hay dibujo alguno.

La función moveto 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" );
moveto( 20, 20 );
lineto( 40, 60 );
lineto( 80, 90 );
getch();
closegraph();
}

Función lineto.

void far lineto(int x, int y);

Esta función es usada para dibujar una línea recta desde la posición actual del cursor gráfico hasta el punto especificado por los argumentos x e y. La línea se dibuja usando el estilo de línea actual, el grosor, y el color actual. Después de que la línea recta haya sido dibujado, la posición del cursor gráfico es actualizado a la posición especificado por los argumentos x e y (el punto final de la línea).

La función lineto 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" );
moveto( 20, 20 );
lineto( 40, 60 );
lineto( 80, 90 );
getch();
closegraph();
}

Función moverel.

void far moverel(int dx, int dy);

Esta función es usada para mover la posición del cursor gráfico a una distancia relativa como los argumentos dx y dy. El argumento dx define la distancia relativa a moverse en la dirección horizontal. El argumento dy define la distancia relativa a moverse en la dirección vertical. Estos valores pueden ser positivos o negativos. No se dibuja ya que el cursor es mudado.

La función moverel 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" );
moveto( 20, 20 );
linerel( 20, 40 );
moverel( 50, 50 );
linerel( 40, 30 );
getch();
closegraph();
}

Función  linerel.

void far linerel(int dx, int dy);

Esta función es usada para dibujar una línea recta a una distancia y dirección predeterminadas desde la posición actual del cursor gráfico. El argumento dx especifica el número relativo de píxels para atravesar en la dirección horizontal. El argumento dy especifica el número relativo de píxels para atravesar en la dirección vertical. Estos argumentos pueden ser tanto valores positivos como negativos. La línea se dibuja usando el estilo de línea actual, el grosor, y el color actual desde la posición actual del cursor gráfico a través de la distancia relativa especificada. Cuando la línea esté terminada, la posición del cursor gráfico es actualizado al
último punto de la línea.

La función linerel 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" );
moveto( 20, 20 );
linerel( 20, 40 );
linerel( 40, 30 );
getch();
closegraph();
}


Función getx.

int far getx(void);

Esta función es usada para obtener la posición, en la dirección horizontal, del cursor gráfico. El valor retornado especifica el lugar del píxel horizontal del cursor gráfico (la coordenada x), relativo a la pantalla del usuario actual.

La función getx retorna la coordenada x del cursor gráfico.

Ejemplo:
#include <graphics.h>
#include <stdio.h>
void main() {
int driver = EGA,modo = EGAHI, x, y;
initgraph( &driver, &modo, "C:\\tc20\\BIN" );
moveto( 300, 150 );
x = getx();
y = gety();
closegraph();
printf( "Cursor gráfico\n\nX: %d\tY: %d\n", x, y );
}

Función gety.

int far gety(void);

Esta función es usada para obtener la posición, en la dirección vertical, del cursor gráfico. El valor retornado especifica el lugar del píxel vertical del cursor gráfico (la coordenada y), relativo a la pantalla del usuario actual.

La función gety retorna la coordenada y del cursor gráfico.

Ejemplo:

#include <graphics.h>
#include <stdio.h>
void main() {
int driver = EGA,modo = EGAHI, x, y;
initgraph( &driver, &modo, “C:\\TC20\\BIN” );
moveto( 300, 150 );
x = getx();
y = gety();
closegraph();
printf( "Cursor gráfico\n\nX: %d\tY: %d\n", x, y );
}

Fuentes:

Fuentes para Texto
                                                          
Constante
Valor
Valor
DEFAULT_FONT
0
Fuente bitmap de 8x8
TRIPLEX_FONT
1
Fuente escalable de tipo triple
SMALL_FONT
2
Fuente escalable pequeña
SANS_SERIF_FONT
3
Fuente escalable de tipo sans serif
GOTHIC_FONT
4
Fuente escalable de tipo gótico
SCRIPT_FONT
5
Fuente escalable de tipo manuscrito
SIMPLEX_FONT
6
Fuente escalable de tipo manuscrito simple
TRIPLEX_SCR_FONT
7
Fuente escalable de tipo manuscrito triple
COMPLEX_FONT
8
Fuente escalable de tipo complejo
EUROPEAN_FONT
9
Fuente escalable de tipo europeo
BOLD_FONT
10
Fuente escalable en negrita

Dirección del Texto

Constante
Valor
Significado
HORIZ_DIR
0
Texto horizontal
VERT_DIR
1
Texto vertical

Justificación de Texto en la Horizontal

Constante
Valor  
Significado
LEFT_TEXT 
0
Justificar a la izquierda
CENTER_TEXT 
1
Centrar el texto
RIGHT_TEXT 
2
Justificar a la derecha

Justificación de Texto en la Vertical

Constante
Valor
Significado
BOTTOM_TEXT
0
Justificar debajo
CENTER_TEXT
1
Centrar el texto
TOP_TEXT
2
Justificar arriba





Tramas:
Tramas predefinidas

Constante
Valor
Significado
EMPTY_FILL            
0
Rellena con el color de fondo
SOLID_FILL
1
Rellena enteramente
LINE_FILL
2
Rellena con líneas horizontales: ---
LTSLASH_FILL
3
Rellena con rayas finas: ///
SLASH_FILL
4
Rellena con rayas gruesas: ///
BKSLASH_FILL
5
Rellena con rayas inversas y finas: \\\
LTBKSLASH_FILL
6
Rellena con rayas inversas y gruesas: \\\
HATCH_FILL
7
Rellena con líneas cruzadas cuadriculadamente: +++
XHATCH_FILL
8
Rellena con líneas cruzadas diagonalmente: XXXX
INTERLEAVE_FILL
9
Rellena con líneas entrelazadas
WIDE_DOT_FILL
10
Rellena con lunares bastante distanciados
CLOSE_DOT_FILL
11
Rellena con lunares poco distanciados
USER_FILL
12
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 Gráficos

Dispositivo/Constante
Valor
DETECT
0
CGA
1
MCGA
2
EGA
3
EGA64
4
EGAMONO
5
IBM8514
6
HERCMONO
7
ATT400
8
VGA
9
PC3270
10
Líneas:
Estilos de Líneas

Constante
Valor
Significado
SOLID_LINE
0
Línea continua _______
DOTTED_LINE
1
Línea hecha con puntos ……..
CENTER_LINE
2
 Línea centrada –––––––––––
DASHED_LINE
3
 Línea discontinua  _._._._.
USERBIT_LINE
4
 Línea definida por el usuario

Nota: El grosor es definido escribiendo NORM_WIDTH para rallas normales y THICK_WIDTH para líneas mas gruesos
Grosores para Líneas
Modos de Escritura


Constante Grosor
Valor
Significado
NORM_THICK
1
 Grosor es de 1 píxel
THICK_WIDTH
3
 Grosor es de 3 píxeles
Constantes
Valor
Significado
COPY_PUT
0
Píxeles de la línea sobrescriben
los píxeles existentes
XOR_PUT
1
Píxel de la pantalla son el
Resulta do de la operación
OR de los píxeles existentes
y los de la línea


Modos:
Modos Gráficos

Dispositivo
Modo/Constante
Código
Resolución
Paleta
Pagina
CGA
CGAC0
0
320X200
4 Clores
1

CGAC1
1
320X200
4 Clores
1

CGAC2
2
320X200
4 Clores
1

CGAC3
3
320X200
4 Clores
1

CGAHI
4
640X200
2 Clores
1
MCGA
MCGAC0
0
320X200
4 Clores
1

MCGAC1
1
320X200
4 Clores
1

MCGAC2
2
320X200
4 Clores
1

MCGAC3
3
320X200
4 Clores
1

MCGAMED
4
640X200
2 Clores
1

MCGAHI
5
640X480
2 Clores
1
EGA
EGALO
0
640X200
16 Colores
4

EGAHI
1
640x350
16 Colores
2
EGA64
A64LO
0
640X200
16 Colores
1

EGA64HI
1
640X350
4 Colores
1
EGAMONO
AMONOHI
3
640x200
2 Colores
1* / 2**
VGA
VGALO
0
640X200
16 Colores
2

VGAMED
1
640x350
16 Colores
2

VGAHI
2
640X480
16 Colores
1
ATT400
ATT400C0
0
320x200
4 Colores
1

ATT400C1
1
320x200
4 Colores
1

ATT400C2
2
320x200
4 Colores
1

ATT400C3
3
320x200
4 Colores
1

ATT400MED
4
640x400
2 Colores
1

ATT400HI
5
640x400
2 Colores
1
HERC
HERCMONOHI
0
720X348
2 Colores
2

PC3270HI
0
720X350
2 Colores
1

IBM8514LO
0
640X480
256 Colores


IBM8514HI
1
1024X768
256 Colores


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


Errores:

Códigos de Errores


Constante
Código
Significado
grOk   
0
Ningún error
grNoInitGraph           
-1
Gráficos no iniciados
grNotDetected
-2
Ningún adaptador gráfico detectado
grFileNotFound         
-3
Fichero de dispositivo no encontrado
grInvalidDriver
-4
Fichero de dispositivo no válido
grNoLoadMem          
-5
No hay memoria para cargar dispositivo
grNoScanMem         
-6
No hay memoria para rellenar
grNoFloodMem         
-7
No hay memoria para usar floodfill
grFontNotFound        
-8
Fichero de fuente no encontrado
grNoFontMem           
-9
No hay memoria para cargar la fuente
grInvalidMode           
-10
Modo gráfico no válido
grError                       
-11
Error gráfico
grIOerror                    
-12
Error gráfico de Entrada/Salida
grInvalidFont              
-13
Fichero de fuente no válido
grInvalidFontNum     
-14
Número de fuente no válido
grInvalidDeviceNum 
-15
Número de dispositivo no válido
grInvalidVersion
-18
Número de versión no válido


Put_op:  

Operaciones con putimage

Constante
Valor
Significado
COPY_PUT
0
Sobrescribir los píxeles existentes
XOR_PUT
1
Operación OR Exclusivo con los píxeles
OR_PUT
2
Operación OR Inclusivo con los píxeles
AND_PUT
3
Operación AND con los píxels
NOT_PUT
4
Invertir la imagen
                                                          
Nota: Estas operaciones se usan exclusivamente con la función putimage. El cual veremos en capítulos posteriores.

 Archivo a descargar: Tema 4

Programa de TC: DosBox Portable

Programa de TC20: TC20

No hay comentarios:

Publicar un comentario