Foros del Web » Programación para mayores de 30 ;) » Programación General »

Parseando un archivo BMP (binario)

Estas en el tema de Parseando un archivo BMP (binario) en el foro de Programación General en Foros del Web. Hola a todos. Estoy programando un parser para archivos BMP, para lo cual estoy leyendo las especificaciones del formato (que encontre bastantes fuentes). El tema ...
  #1 (permalink)  
Antiguo 06/05/2009, 20:21
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 20 años, 2 meses
Puntos: 2
Parseando un archivo BMP (binario)

Hola a todos.

Estoy programando un parser para archivos BMP, para lo cual estoy leyendo las especificaciones del formato (que encontre bastantes fuentes).

El tema es que al tomar la información del archivo me encuentro con que el encabezado es como dice la especificacion pero la información de los pixels es diferente (y no puedo encontrar una especificacion del formato exacta).

Esta es la especificacion que utilice:

MS-Windows BMP File format
http://www.daubnet.com/en/file-format-bmp


Este ultimo dice, por ejemplo:

En el area de informacion de pixels tengo 4 bytes (para 24 bits), de los cuales:

1er byte: ROJO
2do byte: VERDE
3er byte: AZUL
4to byte: Reservado


Yo tengo un BMP de 24 bits sin compresion (exactamente el mismo que la especificacion), creado con Paintbrush, y me encuentro con que el area de informacion de pixels no es de bloques de 4 byes, sino de 3, y que el orden es:

1er byte: AZUL
2do byte: VERDE
3er byte: ROJO



¿Alguno me sabria decir por que el archivo que genero con paintbrush difiere de la especificación?

GRACIAS!
  #2 (permalink)  
Antiguo 11/05/2009, 01:45
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 10 meses
Puntos: 74
Respuesta: Parseando un archivo BMP (binario)

No difiere ... serian 32 bits para 4 bytes, 3*8=24.

1Ch 2 the number of bits per pixel, which is the color depth of the image. Typical values are 1, 4, 8, 16, 24 and 32.

"RGB color (24-bit) pixel values are stored with bytes in the same order (blue, green, red) as in the color table."

http://en.wikipedia.org/wiki/BMP_file_format
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 11/05/2009, 17:06
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 20 años, 2 meses
Puntos: 2
Respuesta: Parseando un archivo BMP (binario)

Hola Idol, gracias por la respuesta.

Justamente lo resolvi hace un rato, el tema es que estaba haciendo mal el padding o rellenado! (y lo de los colores es cierto, va al reves, B G R).

Arme esta "formula" para calcular el padding que se agrega por cada row, en base al WIDTH the la imagen y al bit depth de la imagen:

Código:
		# Calcular y crear rellenado de bits
                $padding = "";
		$paddingCount = 4 - ceil($width / (8 / $bithDepth)) % 4;
		if ($paddingCount % 4 != 0) {
			$padding = str_repeat("\0", $paddingCount);
		}
Esta andando de pelos, puedo generar BMP's con un webservice, me siento un hacker jajaja :P

un abrazo !

PD: Ah otra cuestion que encontre es que si bien hay especificacion de BMP hasta version 5, lo comun es que todos los BMP y los editores graficos usen version 3, esta mas estandarizada segun parece.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:18.