Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Imagen escala real por pantalla e impresora (https://www.clubdelphi.com/foros/showthread.php?t=78866)

briast 22-05-2012 10:33:34

Imagen escala real por pantalla e impresora
 
Hola. Tengo un problema con las imágenes desde Delphi que no consigo solucionar.
Tengo una imagen de una etiqueta de botella escaneada, supuestamente a escala 1:1 (no la he escaneado yo pero me aseguran que está escaneada directamente sin transformación).
La imagen está a 300ppp y de tamaño 1192 x 1116 píxeles. El tamaño real de la etiqueta es de aproximadamente 10cm ancho por 9,5 cm de alto.
Cuando la cargo de un TImagen sin strecht y con autosize me da un tamaño del componente 650 x 682. Ahí ya se ve que en pantalla que es bastante más grande.
Pero si luego voy e imprimo la imagen por impresora (usando fastreport con su componente de imagen) me sale por impresora casi ocupando un A4.
Lo que quiero hacer es que la imagen vista por pantalla o impresa mantenga el tamaño original que se supone que trae el escaneado.
Supongo que alguna operación no estoy haciendo bien pero no estoy puesto en el tema del tratamiento de imágenes.
Alguien me puede indicar como hacerlo.
Gracias.

Casimiro Notevi 22-05-2012 12:15:11

Es que también depende de la configuración de la impresora, puede ser que tenga indicado que escale las imágenes al 100% del tamaño del papel. Fíjate en eso, en la configuración de la impresora.

briast 22-05-2012 12:24:51

Gracias por la respuesta pero no es eso ya que en la vista previa de fast-report ya sale mal, ocupando casi medio A4 cuando la etiqueta es bastante más pequeña realmente.
La cuestión es que al cargar la imagen claro lo hace pixel a pixel y de ahí el tamaño tan grande. esto es normal porque así funciona la imagen digital, pero luego cuando la quiero imprimir debo hacer algún cálculo con la resolución para impresión (que es de 300ppp) y escalar la imagen para que salga bien, pero esto no se como calcularlo.

Casimiro Notevi 22-05-2012 12:28:04

Pero si le pones un tamaño fijo y le dices que se ajuste a ese tamaño, entonces debe salir a ese tamaño.
Vaya, tantos tamaños en la misma frase :)

briast 22-05-2012 16:14:04

Claro ... precisamente eso es lo que quiero calcular, el tamaño. Si consigo ver con que fórmula calculo el tamaño correcto entonces se imprimirá bien. Eso es lo que no tengo claro como hacer.

Casimiro Notevi 22-05-2012 16:42:48

Creo que vas a tener que hacer varias pruebas hasta encontrar el tamaño adecuado.
Aunque pienso que si lo restringes a un tamaño en el papel, y lo ajustas a ese tamaño, debe salir bien aunque se haya escaneado más grande o más pequeño.

briast 22-05-2012 16:51:44

El tamaño del hueco en la página lo tengo fijo a 600x700 px. Ahora se trata de meter la imagen ahí sin deformarla y a tamaño real, de forma que si la imagen real resultase más grande que ese hueco, se cortaría lo que sobrase centrándola, si es menor, pues habrá parte blanca alrededor, pero en cualquier caso la imagen pintada debería corresponder con el original real.
No puedo prefijar un valor porque los tamaños de las imágenes que me van a llegar no son fijos sino que pueden variar de unos a otros.
Tengo que buscar una fórmula a partir de la resolución de la imagen y los puntos por pulgada (pienso yo) que me de un tamaño de imagen correcto para que al imprimirse salga bien.
Es lo único que se me ocurre, pues realmente esperaba que saliera bien sin tener que hacer nada.

Lepe 22-05-2012 18:17:28

Estamos hablando de 3 dispositivos: escaner, pantalla e impresora. Ahí tendrás que pelearte mucho con los dpi (dot per inch al escanear la imagen), ppp (puntos por pulgadas en pantalla) y por último los dpi (calidad de impresión) de la impresora de destino...

En ReportMan, se usaban siempre la unidad "Twip" como medida independiente del dispositivo, así, te permitía trabajar de forma fácil. Mira en FastReport si tiene algo parecido.


Ni que decir tiene que al menos al escanear e imprimir, debes hacerlo con el mismo dpi. Si usas componentes en pantalla, mira si tiene algo de ppp (vendrá como PixelPerInch).

Hay muchas rutinas de conversión entre ppp, dpi y tal... creo las podrás encontrar por twipsToPixels y PixelsToTwips en google

A las malas, otra cosa que se suele hacer es poner una regla (de esas de la escuela) sobre el escaner, de forma que escaneas la imagen y esa regla. Después en el programa tendrías una opción de "calibrar" (donde el usuario marca 2 puntos en la imagen (en 0cm y 10 cm de la regla) y esa distancia te sirve para mostrar la imagen en cm en pantalla y en la impresora.

Nunca te fíes del ancho en pixels, ya que eso varía en pantalla/impresora/scanner.


Suerte y lamento no tener la respuesta exacta, no uso FastReport aún.

briast 25-05-2012 09:07:23

Hola. Gracias por las respuestas.
Al final creo que he dado con la forma de hacerlo. Al menos una que me sirve y creo que es suficiente.
A partir del fichero jpg obtengo los parámetros de altura y anchura de la imagen más la resolución en ppp para X e Y. Esto se obtienen leyendo la cabecera del fichero, así que he tenido que incluir el código para interpretar las cabeceras de ficheros jpg. En concreto para los modos JFIF y EXIF, que son los que me estoy encontrando (desconozco si habrá más modos).
Con esta información procedo de la forma siguiente:
- Obtengo el tamaño real impreso, que se calcula dividiendo la altura y anchura entre los puntos por pulgada. El resultado que obtengo es en pulgadas que paso a cm.
- Con estos datos, calculo el tamaño en píxeles que debe tener la imagen en fastreport usando una constante que proporciona el propio fastreport que nos da la relación entre cm y pixeles.
- Creo un componente de imagen que tenga las dimensiones calculadas anteriormente.
- Así pues, con una imagen en jpg y un componente de imagen con un tamaño fijado, lo que hago es aplicar el strecthdraw para que el jpg tenga el tamaño del componente.

Este resultado, cuando se ve en la vista previa y se imprime coincide perfectamente con el original real.
Un saludo

briast 22-08-2012 13:00:59

Pues me posteo de nuevo porque no se ha resuelto.
He mejorado la calidad con un algoritmo de redimensionado de imagen mejor que el strechdraw por defecto que trae el bitmap, pero aunque la imagen redimensionada es correcta en tamaño es pobre en calidad.

En Fast Report no veo ninguna opción para indicarle la densidad de impresión. La cuestión es que si yo quisiera imprimir una imagen en fast report pero con calidad, siempre la tendría que perder pues al aplicarse los ppp de pantalla en vez de los de impresión, la imagen sale grande y al reducirla para encajarla pierde toda la calidad.

¿Alguien le ocurre lo mismo con Fast Report?


La franja horaria es GMT +2. Ahora son las 15:33:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi