Pregunta

Estoy tratando de analizar placas con código C ++. El punto no es cómo llegar rápido, porque quiero ir al proceso de crear este código C ++ yo mismo y aprender a hacerlo.

Problema:

¡Los bytes en el archivo de mapa de bits no se suman! El archivo de mapa de bits:enter image description here http://icmdeklerk.nl/cor.bmp

Por qué no suman:

Estoy usando imágenes de mapa de bits de 24 bits (*.bmp archivos). Sé que el mapa de bits está construido con BMPFileheader y BMPinfoHeader, que consumen 54 bytes.

Ahora, la imagen tiene 1350 píxeles de ancho y 740 píxeles de alto, lo que resulta en 999000 píxeles.

Debido a que el archivo es de 24 bits, hay 3 bytes por píxel. 999000 * 3 = 2997000 bytes necesarios para la imagen. ¡Pero el tamaño de la imagen (bisizeImage) en el bmpinfoheader dice que la imagen es 2998480 bytes! El tamaño del archivo es 2.998.534 bytes - 54 bytes de encabezado = 2.998.480 de hecho. Entonces el encabezado sigue siendo 54 bytes. No hay meta datos adicionales allí. ¡Cuando divido 2.998.480 / 3 bytes por píxel obtengo 999493,33 píxeles! ¡Ni siquiera es un número redondo!

Me está volviendo loco. ¿Cómo sabe Windows cómo mostrar esta imagen sin cambiar píxeles o colores ni nada?

¿Alguien puede explicarme de dónde provienen estos píxeles/bytes adicionales? ¿Y cómo lidiar con ellos?

¡Gracias por adelantado!

¿Fue útil?

Solución

Los archivos BMP se enfrentan a cada fila a límites de 4 bytes.

Tu imagen es

(1350px de ancho) x (3 bytes por píxel) = 4050 bytes por fila. 4050 no es divisible por 4, sino 4052 es Entonces, se agregan 2 bytes por cada fila (2 * 740 = 1480 bytes) como relleno a su imagen.

El tamaño del archivo es, por lo tanto, 2997000 bytes de imagen + 54 bytes encabezado + 1480 bytes fila de fila = 2998534 bytes, que es el tamaño real del archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top