Formato BMP (Windows Bitmap) — Guía Completa
¿Qué Es BMP?
BMP (Bitmap) es un formato de archivo de gráficos rasterizados nativo de Microsoft Windows, introducido originalmente con Windows 1.0 en 1985. BMP almacena datos de píxeles en un formato sencillo y en gran medida sin comprimir llamado Device Independent Bitmap (DIB), lo que lo convierte en uno de los formatos de imagen más simples de analizar y en uno de los más universalmente legibles por el software Windows. Aunque ha sido en gran medida reemplazado por PNG, JPEG y WebP para la mayoría de los propósitos, BMP sigue siendo relevante en escenarios que requieren acceso directo a píxeles, integración con la API de Windows y flujos de trabajo profesionales de calibración de pantalla.
Estructura del Archivo
Un archivo BMP consta de cuatro secciones principales:
1. Cabecera de Archivo (14 bytes)
Firma : 2 bytes ('BM' — identifica el archivo como BMP)
Tamaño : 4 bytes (tamaño total del archivo en bytes)
Reservado : 4 bytes (específico de la aplicación; normalmente 0)
Desplazamiento datos: 4 bytes (desplazamiento en bytes desde el inicio del archivo a los datos de píxeles)
2. Cabecera DIB (Variable — la más común: BITMAPINFOHEADER, 40 bytes)
Especifica dimensiones, profundidad de color y método de compresión. Los campos Width y Height son enteros con signo; Height negativo indica almacenamiento de arriba a abajo.
3. Tabla de Colores (Opcional)
Para archivos BMP de 1, 4 y 8 bits, una paleta de colores define hasta 256 entradas RGBQUAD. Los BMPs de color verdadero (24 bits) y RGBA (32 bits) no tienen tabla de colores.
4. Datos de Píxeles
Valores de píxeles en bruto, almacenados de izquierda a derecha y (por defecto) de abajo a arriba. Las filas se rellenan a límites de 4 bytes.
Opciones de Profundidad de Color
| Profundidad de Bits | Colores | Descripción |
|---|---|---|
| 1 bit | 2 | Monocromático; blanco/negro o dos colores de paleta personalizados |
| 4 bits | 16 | Indexado de 16 colores; usa tabla de colores |
| 8 bits | 256 | Indexado de 256 colores; compresión RLE opcional |
| 16 bits | 32 768 / 65 536 | Color alto; codificación RGB 5-5-5 o 5-6-5 |
| 24 bits | 16,7 millones | Color verdadero; 8 bits por canal RGB; BMP más común |
| 32 bits | 16,7 millones + alfa | RGBA; 8 bits por canal + 8 bits alfa (o byte sin usar) |
Compresión en BMP
Sin Compresión (Más Común)
La mayoría de los archivos BMP no usan compresión. Los datos de píxeles se almacenan tal cual, haciendo que los archivos BMP sean proporcionales a sus dimensiones:
Tamaño de archivo ≈ 54 bytes (cabeceras) + (ancho × alto × bytes_por_píxel)
Un BMP de 1920 × 1080 de 24 bits = 54 + (1920 × 1080 × 3) = ~6,22 MB
RLE (Run-Length Encoding)
BI_RLE8 y BI_RLE4 proporcionan compresión de longitud de ejecución para BMP de 8 y 4 bits respectivamente. RLE codifica eficientemente píxeles idénticos consecutivos. Funciona bien para gráficos con grandes regiones de color plano (logotipos, arte de píxeles) pero mal para fotografías.
BMP en la Programación Windows
La relevancia principal de BMP hoy está en la programación de sistemas Windows:
- GDI (Graphics Device Interface) — el motor de renderizado de Windows trabaja nativamente con estructuras DIB; las cabeceras BMP son el formato en bruto de los bitmaps GDI
- Archivos de recursos (.rc) — los iconos, cursores y recursos de bitmap de las aplicaciones Windows se almacenan como datos BMP dentro de las secciones de recursos .exe/.dll
- Portapapeles — el portapapeles de Windows usa el formato DIB internamente; las aplicaciones intercambian imágenes a través del portapapeles en formatos compatibles con BMP
- Capturas de pantalla — el clásico
ImpPantde Windows coloca una imagen en formato BMP en el portapapeles antes de que cualquier aplicación la recomprima - Interfaz de hardware — algunos controladores de pantalla y sistemas integrados prefieren estructuras BMP simples para el acceso directo al framebuffer
Ventajas de BMP
- Compatibilidad universal de Windows — legible por cada aplicación Windows, API de Windows y GDI/GDI+ sin bibliotecas externas
- Sin pérdidas y sin comprimir — los datos de píxeles se almacenan exactamente tal cual; sin pérdida de calidad, sin artefactos
- Estructura simple — trivial de analizar; útil para programación de bajo nivel e interfaces de hardware
- Sin preocupaciones de patentes — formato completamente abierto sin restricciones de licencia
- Soporte para todas las profundidades de color — desde monocromático de 1 bit hasta RGBA de 32 bits
Desventajas de BMP
- Tamaños de archivo enormes — BMP de 24 bits a 1920 × 1080 = 6,22 MB; PNG equivalente = 0,8–2 MB; JPEG equivalente = 0,1–0,5 MB
- Sin soporte de metadatos — BMP no tiene una forma estándar de incrustar EXIF, perfiles ICC o información de derechos de autor
- Sin uso web — los navegadores técnicamente soportan BMP pero nunca se usa en publicación web debido al tamaño del archivo
- Sin animación — solo imágenes estáticas
- Sin gestión de color — sin incrustación de perfil ICC en el formato base
BMP vs. PNG: Cuándo Usar Cada Uno
| Criterio | BMP | PNG |
|---|---|---|
| Tamaño de archivo | Grande (sin comprimir) | Pequeño (DEFLATE sin pérdidas) |
| Calidad sin pérdidas | Sí | Sí |
| Transparencia alfa | Parcial (solo cabeceras v4/v5) | Soporte nativo completo |
| Metadatos (EXIF/ICC) | No | Sí |
| Publicación web | No | Sí |
| Compatibilidad API Windows | Máxima | Buena (vía códec) |
| Simplicidad de análisis | Máxima | Moderada |
Elige BMP para programación GDI de Windows, operaciones de portapapeles, objetivos de calibración y cualquier escenario que requiera acceso directo a píxeles sin códec. Elige PNG para prácticamente todo lo demás — web, compartir, archivo — donde importan el tamaño del archivo y los metadatos.
Convertir Archivos BMP
Convertir BMP a PNG es sencillo y sin pérdidas: ambos son formatos sin pérdidas, y la compresión DEFLATE de PNG normalmente reduce un BMP de 6 MB a menos de 2 MB sin ninguna diferencia de calidad. BMP a JPEG reduce el tamaño del archivo en un 95 % o más con mínimas concesiones de calidad a ajustes típicos de calidad JPEG (85–95).