PDF de programación - Impresión de Gráficos - Técnicas avanzadas de programación en C++

Imágen de pdf Impresión de Gráficos - Técnicas avanzadas de programación en C++

Impresión de Gráficos - Técnicas avanzadas de programación en C++gráfica de visualizaciones

Publicado el 26 de Agosto del 2018
505 visualizaciones desde el 26 de Agosto del 2018
46,4 KB
14 paginas
Creado hace 21a (19/10/2002)
Técnicas avanzadas de programación en C++ M.C. Bruno López Takeyas

IMPRESIÓN DE GRÁFICOS



Hasta ahora hemos estado interesados en la creación de despliegue de gráficos en la
pantalla del monitor. Ahora pondremos nuestra atención en obtener impresiones de
nuestros gráficos. Los programas descritos en este capítulo
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 lo
tanto nos enfrentamos con el dilema de que 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 impresión; necesitamos crear un cuerpo largo de software especializado.


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 ser mas largo
para acomodar la resolución mas grande de 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 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.


www.itnuevolaredo.edu.mx/takeyas [email protected]


Técnicas avanzadas de programación en C++ M.C. Bruno López Takeyas

HERRAMIENTAS BÁSICAS PARA IMPRESIÓN

Antes de que se haga algo con la impresora, se necesitan herramientas básicas 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 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.


www.itnuevolaredo.edu.mx/takeyas [email protected]


Técnicas avanzadas de programación en C++ M.C. Bruno López Takeyas

CONSIDERACIONES AL DESCARGAR EL DESPLIEGUE DE PANTALLA A
IMPRESORA



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 impreso es 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
Densidad simple.
Densidad doble.
Doble densidad de
Alta velocidad.
Densidad
Cuádruple.
CRT I
Plotter(1:1)
CRT II
Plotter de doble
Densidad.

Densidad Horizontal
60
120
120


240
80
72
90
144


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


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

Código alterno
ESC K
ESC L
ESC Y


ESC Z
0
0
0
0



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). Tenemos 350 pixels en una línea “Y” del despliegue EGA y esto imprimirá
5.8333 pulgadas de ancho a 60 puntos por pulgada. Para mantener las proporciones
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 pero no la suficiente para degradar el despliegue del


www.itnuevolaredo.edu.mx/takeyas [email protected]


Técnicas avanzadas de programación en C++ M.C. Bruno López Takeyas

0 x 1B 0 x 33 0 x 15

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:



IMPRIMIENDO LA 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, us ualmente 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 fond
  • Links de descarga
http://lwp-l.com/pdf13232

Comentarios de: Impresión de Gráficos - Técnicas avanzadas de programación 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