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
|
||||||||||||||||||
|
|
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