Formato BMP: estructura y usos del mapa de bits de Windows
Formato BMP de Windows: estructura (cabeceras, tabla de colores, píxeles), por qué pesa tanto, almacenamiento de abajo arriba, relleno de filas y usos actuales.
BMP es el formato que guarda en archivo el mapa de bits independiente del dispositivo (DIB) que usaban Microsoft Windows y OS/2. No es una norma fijada por un organismo internacional de estandarización: la documentación para desarrolladores de Microsoft hace de especificación de facto. Su mayor rasgo es que su estructura es tan simple que cualquier programa puede leerlo y escribirlo con facilidad.
Estructura del archivo
Según el documento «Bitmap Storage» de Microsoft Learn, un archivo BMP se compone en este orden:
| Orden | Componente | Contenido |
|---|---|---|
| 1 | BITMAPFILEHEADER | Identificador de archivo (BM), tamaño del archivo, posición de inicio de los datos de píxeles |
| 2 | BITMAPINFOHEADER (o cabeceras V4/V5) | Ancho y alto en píxeles, bits por píxel, método de compresión, resolución |
| 3 | Tabla de colores (matriz RGBQUAD) | Se usa en imágenes de 1, 4 u 8 bits con paleta |
| 4 | Matriz de píxeles | Los datos reales de la imagen |
Como los dos primeros bytes del archivo son BM en ASCII (42 4D en hexadecimal), con esta firma se puede comprobar que un archivo es BMP aunque tenga otra extensión. La cabecera de información también tiene un campo para la resolución de impresión (píxeles por metro).
Se guarda de abajo arriba
Un BMP normal guarda los píxeles empezando por la fila inferior y subiendo (bottom-up). Si el valor de altura en la cabecera es negativo, está guardado de arriba abajo (top-down). Además, al final de cada fila se añaden bytes de relleno para que el número de bytes sea múltiplo de 4. Son errores frecuentes al programar un lector de BMP propio.
Ejemplo de cálculo del tamaño de fila
Cada fila de un BMP debe alinearse a 4 bytes. Si una imagen de 24 bits mide 101 píxeles de ancho, los datos reales de una fila son 101 × 3 = 303 bytes, pero se guarda con 1 byte de relleno como 304 bytes para que sea múltiplo de 4. Por tanto, el tamaño total de los datos de píxeles es (bytes por fila) × píxeles de alto, y sumando la cabecera (normalmente 54 bytes) se obtiene el tamaño del archivo. Por esta regla, al manejar directamente imágenes cuyo ancho no es múltiplo de 4, es habitual el error de filas que se ven desplazadas.
Por qué pesa tanto
BMP guarda casi siempre los píxeles en bruto sin comprimir. Un BMP de 24 bits usa 3 bytes por píxel, así que una imagen de 1920×1080 ocupa unos 6.2 MB y una foto de smartphone de 4032×3024, unos 36.6 MB. En imágenes con paleta de 8 bits o menos se puede elegir la compresión RLE (codificación por longitud de series), pero en fotos apenas tiene efecto. MDN también recomienda evitar BMP en contenido web por su tamaño.
Transparencia
El BMP tradicional de 24 bits no tiene canal alfa. Un BMP de 32 bits con cabeceras V4/V5 puede definir una máscara alfa, pero muchos programas no la interpretan correctamente como transparencia, así que para intercambiar imágenes transparentes es más seguro PNG.
Cuándo se sigue usando BMP
- Cuando equipos industriales antiguos, dispositivos embebidos, impresoras de tickets o algunos programas internos de empresa solo aceptan BMP
- En programas sencillos o ejemplos didácticos que necesitan manejar los píxeles tal cual, sin comprimir ni descomprimir
- Como forma de guardar las imágenes pequeñas dentro de los iconos de Windows (ICO)
Precauciones al convertir
- BMP → PNG: sin pérdida y con una gran reducción de tamaño. Es la mejor conversión para archivar y compartir.
- BMP → JPG: en fotos el tamaño baja a una fracción de decenas de veces, pero se aplica compresión con pérdida.
- Otro formato → BMP: comprueba la profundidad de bits que exige el equipo (24 u 8 bits). Las zonas transparentes se rellenan con el color de fondo. Puedes guardar en BMP con la herramienta Convertir formato de imagen.
Pruébalo ahora