PDF de programación - ARTICULO Impresion de graficos en C++

Imágen de pdf ARTICULO Impresion de graficos en C++

ARTICULO Impresion de graficos en C++gráfica de visualizaciones

Publicado el 5 de Marzo del 2019
495 visualizaciones desde el 5 de Marzo del 2019
39,6 KB
9 paginas
Creado hace 20a (16/06/2003)
IMPRESIÓN DE GRÁFICOS EN C++

Bruno López Takeyas

Instituto Tecnológico de Nuevo Laredo

Reforma Sur 2007, C.P. 88250, Nuevo Laredo, Tamps. México

http://www.itnuevolaredo.edu.mx/takeyas
E-mail: [email protected]



en

ahora

hemos

nuestra

atención



Resumen: Hasta
estado
interesados en la creación de despliegue de
gráficos en la pantalla del monitor. Ahora
pondremos
obtener
impresiones de nuestros gráficos. Los programas
descritos en este documento fueron diseñados
específicamente para usarse con una impresora
punto matriz Epson FX-86e. Deberían trabajar
igual de bien en otras impresoras Epson de las
series MX y FX, y con pequeñas modificaciones
en las impresoras de matriz de puntos IBM y
otras impresoras de matriz de puntos compatibles
con los comandos gráficos de Epson.

Si tienes un monitor EGA de 12 pulgadas el
tamaño del despliegue es de 7 x 9- ? pulgadas.
Esto corresponde a una resolución horizontal de
68 líneas por pulgadas y una resolución vertical
de 50 líneas por pulgada. Sin el recurso de alguna
técnica en especial, podremos fácilmente obtener
una resolución horizontal de 120 líneas por
pulgada y una resolución vertical de 72 líneas por
pulgadas desde la impresora. Podremos mejorar
esto usando comandos especiales de impresión y
un software mas especializado. Es evidente hasta
aquí que la impresora es capaz de una resolución
mayor que el monitor. Por
tanto nos
enfrentamos
si
desarrollamos las funciones de impresión en el
monitor; mismas que duplican el despliegue en la
impresora, entonces sacrificamos la capacidad de
resolución. Mientras que si tratamos de tomar
ventaja de las capacidades completas de


el dilema de que

con

lo



impresión; necesitamos crear un cuerpo largo de
software especializado.



1. SOFTWARE DE IMPRESIÓN


Estos apuntes no se meten en grandes detalles con
el diseño del software para imprimir en alta
resolución. Mas adelante vamos a ir directo a lo
básico de las técnicas usadas para la impresión de
gráficos por las impresoras Epson. Esto debería
de darnos un buen entendimiento de cómo
mandar alta resolución de datos a la impresora.
Para crear tanta información como se necesite,
por lo menos, para escribir versiones de todas las
funciones en la librería gdraws y algunas de la
librería gtools. Pueden ser esencialmente
lo
mismo como funciones, excepto que el sistema de
coordenadas necesita
largo para
acomodar
la
impresora. En algunos casos esto puede necesitar
el uso de enteros largos donde se usaban enteros
en las funciones originales. En vez de trazar los
puntos directamente a la pantalla, se necesita
grabar en un arreglo bidimensional. Si se planea
impresión solo en blanco y negro, una arreglo de
resolución para 120 x 72 puntos por pulgada
podría ser de 120 x 432 bytes o un total de 51,840
bytes. Cada píxel (punto grafico) podría ser
asignado como un byte y el software tendría que
determinar como posicionar ese byte en particular
cuando el píxel debe ser accionado. Luego,
cuando el arreglo esta lleno con el despliegue
propuesto se puede usar un programa genérico

la resolución mas grande de

ser mas

1

para mandar esta información a la impresora. Si
se planea usar algunas formas de salida a
impresión que requieran color, el tamaño del
arreglo se incrementará por un factor de cuatro.


2. HERRAMIENTAS BÁSICAS

PARA IMPRESIÓN

básicas

herramientas


Antes de que se haga algo con la impresora, se
necesitan
para
comunicarnos con ella. Algunas versiones de C
contienen rutinas I/O estándar para la impresora,
Turbo C no las tiene. En cualquier caso, muchas
de las rutinas estándard mandan un retorno de
carro (CR) al final de cada línea. No siempre se
quiere esto cuando se imprimen gráficos, sin
embargo, por eso nuestras propias funciones son
esenciales. Sólo 2 de estas son necesarias y son
simples. La Fig. 1 enlista una función para
determinar el status de la impresora. Esto es que
no se desea mandar un caracter a la impresora si
está desconectada u ocupada. Aquí se usa el
servicio de impresión ROM BIOS para verificar
el status y devolver un 80 hexadecimal si la
impresora está lista o cero si no lo está.


char status()
{
union REGS reg;

reg.h.ah = 2;
reg.x.dx = 0;
int86(0x17,&reg,&reg);
return (reg.h.ah & 0x80);
}


Fig. 1. Función para determinar el status de la
impresora.


La segunda función enlistada en la Fig. 2 manda
un caracter a la impresora, la declaración while
causa que la función se enlace hasta que la
impresora esté lista. Hasta este punto, el regreso
de la función status es diferente de cero y la

2

función continúa. El caracter que pasó a la
función como un parámetro está cargado dentro
de un registro apropiado y el servicio ROM BIOS
de la impresora es usado para mandarlo.



char put_out (char caracter)
{
union REGS reg;

while(!status());
reg.h.ah = 0;
reg.h.al = caracter;
reg.x.dx = 0;
return (reg.h.ah);
}

Fig. 2. Función para mandar un caracter a la
impresora.



3. CONSIDERACIONES AL

DESCARGAR EL DESPLIEGUE
DE PANTALLA A IMPRESORA

impreso es


Se desea que la impresora reproduzca la pantalla
de gráficos con imágenes de la misma figura que
aparece en el monitor. Puesto que el despliegue
es más ancho que alto, el modo apropiado para
crear un despliegue
tener una
coordenada “X” para lo ancho de la hoja y una
coordenada “Y “para lo estrecho. Esto significa
que los pixels “Y” serán impresos por pines en la
columna de punto matriz de pines de
la
impresora. La impresora tiene 9 pines en una
columna, pero normalmente solo 8 están usados
para gráficos y esos 8 pueden fácilmente ser
direccionados por un byte de información gráfica.
Los 9 pines pueden ser usados, pero un segundo
byte es requerido para suministrar información
del noveno únicamente y esto es mas bien
ineficiente, cada pin se imprime en un espacio de
1/72 de pulgada. Es por eso que la resolución es
esencialmente de 72 líneas por pulgada. Para
lograr un espaciamiento correcto de línea para

que el siguiente paso de 8 pines sea directamente
adyacente al paso actual, se tiene que posicionar
la impresora para una línea de espacio de 8/72 de
pulgada. Se puede ligeramente reducir el tamaño
de la salida a impresión en la dirección “Y”, si es
necesario, reduciendo la línea de debajo de 8/72
de una pulgada. Entonces coincidirá cada primer
punto en el octavo del paso anterior, pero esto
puede ser no visible. No se puede alargar el
tamaño de impresión de esta forma, porque
incrementar la línea de espacio deja estrechas
líneas blancas, que son visibles.


Opción

de

las proporciones

Código
alterno
ESC K
ESC L
ESC Y


ESC Z
0
0
0
0


Código
primario
ESC*0
ESC*1
ESC*2


ESC*3
ESC*4
ESC*5
ESC*6
ESC*7

Densidad
Horizontal
60
120
120


240
80
72
90
144


Densidad
simple.
Densidad
doble.
Doble
densidad de
Alta
velocidad.
Densidad
Cuádruple.
CRT I
Plotter(1:1)
CRT II
Plotter
doble
Densidad.

Fig. 3. Modos gráficos en las impresoras Epson y
los comandos para activarlos.


Consideremos lo que podría pasar si empezamos
seleccionando la densidad simple (modo 1).
línea “Y” del
Tenemos 350 pixels en una
despliegue EGA y esto
imprimirá 5.8333
pulgadas de ancho a 60 puntos por pulgada. Para
mantener
apropiadas del
despliegue EGA, se necesita tener la impresión
7.7777 pulgadas de ancho, que para 640 pixels
“X” requieren que 8 pixels abarquen 21/216 de
pulgada. Esto requiere un poco de coincidencia

0 x 1B 0 x 33 0 x 15

IMPRIMIENDO LA

pero no la suficiente para degradar el despliegue
del monitor. El comando Epson para posicionar la
línea de espacio en 216 de pulgada es: ESC 3 n.

Donde el 3 es un 3 en código ASCII o 33
Hexadecimal. La n, representa el numero 216 de
pulgada para moverse de cada línea, no es ASCII,
por eso el comando de línea de espacio 21/216
podría ser:



4.
PANTALLA.

Primero la mayoría de los programas no hace el
intento de centrar el despliegue en el papel,
entonces normalmente aparece en una esquina.
Segundo, usualmente no seleccionan los rangos
correctos para que la impresora esté en una
porción propia. En el despliegue EGA
los
círculos también aparecen como óvalos en la
impresora. Tercero si el fondo del despliegue en
EGA esta de color, todo el despliegue usualmente
se imprime como una burbuja negra. La función
de la Fig. 4 corrige estas deficiencias. La función
primero prepara la impresora para doble espacio
de 21/216 por pulgada. Siguiente, 12 líneas son
alimentadas para la salida a la impresora para
alistar la entrada de la impresora para que esté
centrado en la página en la dirección “X”.
Siguiente, la función lee un píxel del despliegue
en la locación (0,0) y asume que los colores que
regresan es el color anterior. La impresora
solamente imprime pixels cuyos colores son
diferentes al color de fondo. Si se asegura que
nunca se tiene el píxel (0,0) en cualquier otro
color que se usa de fondo, se evita la burb
  • Links de descarga
http://lwp-l.com/pdf15418

Comentarios de: ARTICULO Impresion de graficos en C++ (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad