Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Averiguar los bytes horizontales y verticales de una imagen (https://www.clubdelphi.com/foros/showthread.php?t=28338)

Javi2 16-12-2005 09:32:06

Averiguar los bytes horizontales y verticales de una imagen
 
Hola, me gustaría saber como puedo averiguar el número de bytes horizontales y verticales que ocupa un bitmap, es decir, si un bitmap 16x16 significa (creo) que ocupa 16 pixels en horizontal y 16 pixels en vertical, obtener algo equivalente pero en bytes.

Espero haber explicado el problema con claridad.

Muchas gracias de antemano

Neftali [Germán.Estévez] 16-12-2005 09:42:20

No acabo de enterderte bien;
No hay correspondencia directa entre pixels y bytes, ya que en esa relación entra también el nivel de color de la imagen; Una imagen en monocormo de 16x16 tendrá una corespondencia en bytes diferente a la misma imagen de 16x16 en 16 colores, en 256 colores,...

Otra cosa que tampoco acabo de entender es lo de bytes horizontales y verticales; Byte no es una dimensión que se mida en dos direcciones; Es como decir cuantos kilos horizontales y kilos verticales pesa un saco de arena...?¿?¿?¿

Seguro que es que no te he entendido; Tal ves si pones un ejemplo...

Javi2 16-12-2005 09:58:06

A ver si me puedo explicar con un poco más de claridad:

Si una imagen es como un rectángulo, cada byte que representa esta imagen representará una posición (x,y) de este rectángulo ¿no?. Pues bien, lo que yo necesito saber es cuantos bytes caben o o se necesitan para representar una fila de este rectángulo (ancho de la imagen) y lo mismo para una columna (alto de la imagen).
Entiendo que el fichero de bytes que representa la imagen siempre tiene el mismo tamaño, independientemente de los colores utilizados

Sé que es un poco difícil de entender pero lo necesito para poder ejecutar la secuencia de escape "FS q" sobre una impresora de tickets, o sea que si alguien sabe como ejecutar esta secuencia correctamente, se lo agradecería enormemente.

A lo mejor digo alguna barbaridad, pero es lo que me indican las especificaciones de esta secuencia y no estoy muy dado en el tema...

Muchas gracias.

Neftali [Germán.Estévez] 16-12-2005 10:33:00

Cita:

Empezado por Javi2
...Entiendo que el fichero de bytes que representa la imagen siempre tiene el mismo tamaño, independientemente de los colores utilizados

Es que esa afirmacion no es correcta; Cuantos más colores se usan en un dibujo, más espacio se necesita para guardar un punto (x,y); No siempre se utiliza un Byte. Por ejemplo, si usas 2 colores basta con guardar para ese punto un 0 o un 1, pero si usas 256 colores, para guardar un punto necesitas almacenar un nuemero entre 1 y 255 y así sucesivamente...
Haz una prueba sencilla; Coge el MSPaint, abre un archivo nuevo y sin dibujar nada guardalo con 2 colores, con 16, con 256,... y verás como el tamaño del fichero cambia en disco.

En cuanto a la secuencia de escape, lo siento, pero no puedo ayudarte.

Neftali [Germán.Estévez] 16-12-2005 10:33:03

Cita:

Empezado por Javi2
...Entiendo que el fichero de bytes que representa la imagen siempre tiene el mismo tamaño, independientemente de los colores utilizados

Es que esa afirmacion no es correcta; Cuantos más colores se usan en un dibujo, más espacio se necesita para guardar un punto (x,y); No siempre se utiliza un Byte. Por ejemplo, si usas 2 colores basta con guardar para ese punto un 0 o un 1, pero si usas 256 colores, para guardar un punto necesitas almacenar un numero entre 1 y 255 y así sucesivamente...
Haz una prueba sencilla; Coge el MSPaint, abre un archivo nuevo y sin dibujar nada guardalo con 2 colores, con 16, con 256,... y verás como el tamaño del fichero cambia en disco.

En cuanto a la secuencia de escape, lo siento, pero no puedo ayudarte.

Javi2 16-12-2005 11:39:50

No te preocupes, creo que he encontrado algo que me puede servir (todavía tengo que probarlo). Se trata de la propiedad Pixelformat de un Bitmap, la cual creo que indica los bits utilizados para guardar la información relativa a un pixel.

Muchas gracias por tu ayuda.

De todos modos, si alguien conoce el funcionamiento de la secuencia de escape "FS q", agradecería que me lo comunicara ya que en Internet existe poquísima información al respecto.

Un saludo

Athanatos 17-12-2005 22:21:04

Cita:

Empezado por Neftali
Es que esa afirmacion no es correcta; Cuantos más colores se usan en un dibujo, más espacio se necesita para guardar un punto (x,y); No siempre se utiliza un Byte. Por ejemplo, si usas 2 colores basta con guardar para ese punto un 0 o un 1, pero si usas 256 colores, para guardar un punto necesitas almacenar un nuemero entre 1 y 255 y así sucesivamente...
Haz una prueba sencilla; Coge el MSPaint, abre un archivo nuevo y sin dibujar nada guardalo con 2 colores, con 16, con 256,... y verás como el tamaño del fichero cambia en disco.

En cuanto a la secuencia de escape, lo siento, pero no puedo ayudarte.

¿Por que no imprimes usando windows? (si la impresora tiene los drivers correspondientes claro esta) Segun recuerdo :rolleyes:definir el grafico que quieres imprimir no es más complicado que copiar un bitmap de un canvas a otro canvas y configurar un montón de opciones.

Efectivamente con el atributo de bits por pixel puedes calcular el tamaño que ocupa un pixel, pero posiblemente para imprimirlo tengas que fijar el numero de bits por pixel en 1. Conversion que la puedes hacer fijando dicha propiedad. A parte tienes que tomar en cuenta que generalmente existe alineamiento de bytes por linea. Es decir si una linea ocupa, digamos 487 bits (1 bit por pixel), será alineado a 1, 2 o 4 bytes dependiendo del caso (generalmente a 4 bytes pero podria que se alinee a 1 byte), ocupando cada linea 61, 62 y 64 bytes respectivamente.


La franja horaria es GMT +2. Ahora son las 06:19:00.

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