Formato de archivo BMP
El formato de archivo BMP o mapa de bits, es un formato de archivo de imagen de gráficos de trama que se utiliza para almacenar imágenes digitales de mapa de bits, independientemente del dispositivo de visualización (como un adaptador de gráficos)., especialmente en los sistemas operativos Microsoft Windows y OS/2.
El formato de archivo BMP es capaz de almacenar imágenes digitales bidimensionales en varias profundidades de color y, opcionalmente, con compresión de datos, canales alfa y perfiles de color. La especificación de metarchivo de Windows (WMF) cubre el formato de archivo BMP.
Mapas de bits independientes del dispositivo y el formato de archivo BMP
Microsoft ha definido una representación particular de mapas de bits de color de diferentes profundidades de color, como una ayuda para intercambiar mapas de bits entre dispositivos y aplicaciones con una variedad de representaciones internas. Llamaron a estos mapas de bits independientes del dispositivo o DIB, y el formato de archivo para ellos se llama formato de archivo DIB o formato de archivo de imagen BMP.
Según el soporte de Microsoft:
Un bitmap independiente del dispositivo (DIB) es un formato utilizado para definir bitmaps dependientes del dispositivo en varias resoluciones de color. El objetivo principal de los DIB es permitir que los bitmaps se muevan de un dispositivo a otro (de ahí, la parte dependiente del dispositivo del nombre). Un DIB es un formato externo, en contraste con un bitmap dependiente del dispositivo, que aparece en el sistema como un objeto bitmap (creado por una aplicación...). Un DIB normalmente se transporta en metafiles (usualmente utilizando la función StretchDIBits()), archivos BMP, y el Clipboard (CF_DIB formato de datos).
Las siguientes secciones analizan en detalle los datos almacenados en el archivo BMP o DIB. Este es el formato de archivo BMP estándar. Algunas aplicaciones crean archivos de imagen de mapa de bits que no cumplen con la documentación de Microsoft. Además, no se utilizan todos los campos; se encontrará un valor de 0 en estos campos no utilizados.
Estructura de archivos
El archivo de imagen de mapa de bits consta de estructuras de tamaño fijo (encabezados), así como estructuras de tamaño variable que aparecen en una secuencia predeterminada. Muchas versiones diferentes de algunas de estas estructuras pueden aparecer en el archivo, debido a la larga evolución de este formato de archivo.
Refiriéndose al diagrama 1, el archivo de mapa de bits se compone de estructuras en el siguiente orden:
Nombre de la estructura | Facultativo | Tamaño | Propósito | Comentarios |
---|---|---|---|---|
Cabecera de archivo Bitmap | No | 14 bytes | Para almacenar información general sobre el archivo de imagen bitmap | No es necesario después de que el archivo se carga en memoria |
DIB header | No | Tamaño fijo (7 versiones diferentes existen) | Para almacenar información detallada sobre la imagen bitmap y definir el formato pixel | Inmediatamente sigue el encabezado del archivo Bitmap |
Máscaras extra bit | Sí. | 3 ó 4 DWORD (12 o 16 bytes) | Para definir el formato pixel | Presente sólo en caso de que el encabezado DIB sea el BITMAPINFOHEADER y el miembro del Método de Compresión se establece en BI_ BITFIELDS o BI_ ALPHABITFIELDS |
Mesa de color | Semioptional | Tamaño variable | Para definir los colores utilizados por los datos de imagen bitmap (array Pixel) | Obligatorio para profundidades de color ≤ 8 bits |
Gap1 | Sí. | Tamaño variable | Ajuste estructural | Un artefacto del archivo offset a la matriz Pixel en el encabezado del archivo Bitmap |
Pixel array | No | Tamaño variable | Para definir los valores reales de los píxeles | El formato pixel está definido por el encabezado DIB o máscaras extra bit. Cada fila en el array Pixel está acolchada a un múltiplo de 4 bytes en tamaño |
Gap2 | Sí. | Tamaño variable | Ajuste estructural | Un artefacto del campo de compensación de datos de perfil ICC en el encabezado DIB |
Perfil de color ICC | Sí. | Tamaño variable | Para definir el perfil de color para la gestión de color | También puede contener una ruta a un archivo externo que contiene el perfil de color. Cuando se carga en memoria como " DIB no empaquetado", se encuentra entre la mesa de color y Gap1. |
DIB en memoria
Un archivo de imagen de mapa de bits cargado en la memoria se convierte en una estructura de datos DIB, un componente importante de la API GDI de Windows. La estructura de datos DIB en memoria es casi la misma que el formato de archivo BMP, pero no contiene el encabezado del archivo de mapa de bits de 14 bytes y comienza con el encabezado DIB. Para los DIB cargados en la memoria, la tabla de colores también puede constar de entradas de 16 bits que constituyen índices de la paleta realizada actualmente (un nivel adicional de direccionamiento indirecto), en lugar de definiciones de color RGB explícitas. En todos los casos, la matriz de píxeles debe comenzar en una dirección de memoria que sea un múltiplo de 4 bytes. En los DIB no empaquetados cargados en la memoria, los datos de perfil de color opcionales deben ubicarse inmediatamente después de la tabla de colores y antes del espacio1 y la matriz de píxeles (a diferencia de la figura 1).
Cuando el tamaño de gap1 y gap2 es cero, la estructura de datos DIB en memoria se suele denominar "DIB empaquetado" y se puede hacer referencia a él mediante un solo puntero que apunta al comienzo del encabezado DIB. En todos los casos, la matriz de píxeles debe comenzar en una dirección de memoria que sea un múltiplo de 4 bytes. En algunos casos, puede ser necesario ajustar el número de entradas en la tabla de colores para forzar la dirección de memoria de la matriz de píxeles a un múltiplo de 4 bytes. Para "DIB empacados" cargados en la memoria, los datos del perfil de color opcional deben seguir inmediatamente a la matriz de píxeles, como se muestra en el diag. 1 (con gap1=0 y gap2=0).
"DIB empaquetados" son necesarios para las funciones de la API del portapapeles de Windows, así como para algunas funciones de recursos y pinceles con patrones de Windows.
Encabezado de archivo de mapa de bits
Este bloque de bytes se encuentra al principio del archivo y se utiliza para identificar el archivo. Una aplicación típica lee primero este bloque para asegurarse de que el archivo es realmente un archivo BMP y que no está dañado. Los primeros 2 bytes del formato de archivo BMP son el carácter "B" luego el carácter "M" en codificación ASCII. Todos los valores enteros se almacenan en formato little-endian (es decir, el byte menos significativo primero).
Hex | Offset dec | Tamaño | Propósito |
---|---|---|---|
00 | 0 | 2 bytes | El campo de encabezado utilizado para identificar el archivo BMP y DIB es 0x42 0x4D en hexadecimal, igual que BM en ASCII. Las siguientes entradas son posibles:
|
02 | 2 | 4 bytes | El tamaño del archivo BMP en bytes |
06 | 6 | 2 bytes | Reservado; el valor real depende de la aplicación que crea la imagen, si se crea manualmente puede ser 0 |
08 | 8 | 2 bytes | Reservado; el valor real depende de la aplicación que crea la imagen, si se crea manualmente puede ser 0 |
0A | 10 | 4 bytes | El offset, es decir, dirección de inicio, del byte donde se pueden encontrar los datos de imagen bitmap (pixel array). |
Encabezado DIB (encabezado de información de mapa de bits)
Este bloque de bytes le dice a la aplicación información detallada sobre la imagen, que se usará para mostrar la imagen en la pantalla. El bloque también coincide con el encabezado utilizado internamente por Windows y OS/2 y tiene varias variantes diferentes. Todos ellos contienen un campo dword (32 bits), especificando su tamaño, para que una aplicación pueda determinar fácilmente qué encabezado se usa en la imagen. La razón por la que hay diferentes encabezados es que Microsoft extendió el formato DIB varias veces. Los nuevos encabezados extendidos se pueden usar con algunas funciones de GDI en lugar de las antiguas, lo que brinda más funcionalidad. Dado que GDI admite una función para cargar archivos de mapa de bits, las aplicaciones típicas de Windows utilizan esa funcionalidad. Una consecuencia de esto es que para tales aplicaciones, los formatos BMP que admiten coinciden con los formatos compatibles con la versión de Windows que se está ejecutando. Consulte la siguiente tabla para obtener más información.
Tamaño | Nombre del encabezado | Apoyo al sistema operativo | Características | Escrito por |
---|---|---|---|---|
12 | BITMAPCOREHEADER OS21XBITMAPHEADER | Windows 2.0 o posterior OS/2 1.x | ||
64 | OS22XBITMAPHEADER | OS/2 BITMAPCOREHEADER2 | Agrega la mediatonización. Añade compresión RLE y Huffman 1D. | |
16 | OS22XBITMAPHEADER | Esta variante del encabezado anterior contiene sólo los primeros 16 bytes y se supone que los bytes restantes son valores cero.
Un ejemplo de tal caso es el gráfico pal8os2v2-16.bmp de la suite BMP. | ||
40 | BITMAPINFOHEADER | Windows NT, 3.1x o posterior | Extiende el ancho y la altura del bitmap a 4 bytes. Añade 16 formatos bpp y 32 bpp. Añade compresión RLE. | |
52 | BITMAPV2INFOHEADER | Indocumentados | Añade máscaras RGB bit. | Adobe Photoshop |
56 | BITMAPV3INFOHEADER | No está documentado oficialmente, pero esta documentación fue publicada en los foros de Adobe, por un empleado de Adobe con una declaración de que el estándar estaba en un punto en el pasado incluido en la documentación oficial de MS | Agrega alfa canal poco máscara. | Adobe Photoshop |
108 | BITMAPV4HEADER | Windows NT 4.0, 95 o posterior | Añade tipo de espacio de color y corrección gamma | |
124 | BITMAPV5HEADER | Windows NT 5.0, 98 o posterior | Añade perfiles de color ICC | El GIMP |
Offset (hex) | Offset (dec) | Tamaño (bytes) | OS/2 1.x BITMAPCOREHEADER |
---|---|---|---|
0E | 14 | 4 | El tamaño de este encabezado (12 bytes) |
12 | 18 | 2 | El ancho del mapa de bits en píxeles (sin asignar 16 bits) |
14 | 20 | 2 | La altura del mapa de bits en píxeles (sin asignar 16 bits) |
16 | 22 | 2 | El número de planos de color, debe ser 1 |
18 | 24 | 2 | El número de bits por pixel |
El BITMAPCOREHEADER de Windows 2.x difiere del BITMAPCOREHEADER de OS/2 1.x (que se muestra en la tabla anterior) en el detalle de que los campos de ancho y alto de la imagen son enteros con signo, no sin signo.
Las versiones posteriores a BITMAPINFOHEADER solo agregan campos al final del encabezado de la versión anterior. Por ejemplo: BITMAPV2INFOHEADER agrega campos a BITMAPINFOHEADER y BITMAPV3INFOHEADER agrega campos a BITMAPV2INFOHEADER.
Se ha introducido un canal alfa integrado con BITMAPV3INFOHEADER no documentado y con BITMAPV4HEADER documentado (desde Windows 95) y es utilizado en el sistema de tema e inicio de sesión de Windows XP, así como en Microsoft Office (desde v2000); es compatible con algunos software de edición de imágenes, como Adobe Photoshop desde la versión 7 y Adobe Flash desde la versión MX 2004 (entonces conocido como Macromedia Flash). También es compatible con GIMP, Google Chrome, Microsoft PowerPoint y Microsoft Word.
Por motivos de compatibilidad, la mayoría de las aplicaciones utilizan los encabezados DIB más antiguos para guardar archivos. Con OS/2 que ya no es compatible después de Windows 2000, por ahora el formato común de Windows es el encabezado BITMAPINFOHEADER. Consulte la siguiente tabla para ver su descripción. Todos los valores se almacenan como enteros sin signo, a menos que se indique explícitamente.
Offset (hex) | Offset (dec) | Tamaño (bytes) | Windows BITMAPINFOHEADER |
---|---|---|---|
0E | 14 | 4 | el tamaño de este encabezado, en bytes (40) |
12 | 18 | 4 | el ancho del mapa de bits en píxeles (integer señalizado) |
16 | 22 | 4 | la altura del mapa de bits en píxeles (integer señalizado) |
1A | 26 | 2 | el número de planos de color (debe ser 1) |
1C | 28 | 2 | el número de bits por pixel, que es la profundidad de color de la imagen. Los valores típicos son 1, 4, 8, 16, 24 y 32. |
1E | 30 | 4 | el método de compresión que se utiliza. Vea la siguiente tabla para una lista de posibles valores |
22 | 34 | 4 | el tamaño de la imagen. Este es el tamaño de los datos de mapa de bits crudos; se puede dar un maniquí 0 para bitmaps BI_RGB. |
26 | 38 | 4 | la resolución horizontal de la imagen. (pixel por metro, entero firmado) |
2A | 42 | 4 | la resolución vertical de la imagen. (pixel por metro, entero firmado) |
2E | 46 | 4 | el número de colores en la paleta de colores, o 0 por defecto a 2n |
32 | 50 | 4 | el número de colores importantes utilizados, o 0 cuando cada color es importante; generalmente ignorado |
El método de compresión (offset 30) puede ser:
Valor | Identificada por | Método de compresión | Comentarios |
---|---|---|---|
0 | BI_RGB | ninguno | Más común |
1 | BI_RLE8 | RLE 8-bit/pixel | Se puede utilizar sólo con mapas de bits 8-bit/pixel |
2 | BI_RLE4 | RLE 4-bit/pixel | Se puede utilizar sólo con mapas de bits 4-bit/pixel |
3 | BI_BITFIELDS | OS22XBITMAPHEADERHuffman 1D | BITMAPV2INFOHEADER: máscaras de campo de bits RGB, BITMAPV3INFOHEADER+: RGBA |
4 | BI_JPEG | OS22XBITMAPHEADERRLE-24 | BITMAPV4INFOHEADER+: Imagen JPEG para impresión |
5 | BI_PNG | BITMAPV4INFOHEADER+: Imagen PNG para imprimir | |
6 | BI_ALPHABITFIELDS | Máscaras de campo poco RGBA | sólo Windows CE 5.0 con. NET 4.0 o posterior |
11 | BI_CMYK | ninguno | sólo Windows Metafile CMYK |
12 | BI_CMYKRLE8 | RLE-8 | sólo Windows Metafile CMYK |
13 | BI_CMYKRLE4 | RLE-4 | sólo Windows Metafile CMYK |
Un OS/2 2.x OS22XBITMAPHEADER (BITMAPINFOHEADER2 en la documentación de IBM) contiene 24 bytes adicionales:
Offset (hex) | Offset (dec) | Tamaño (bytes) | OS/2 OS22XBITMAPHEADER ()BITMAPINFOHEADER2) |
---|---|---|---|
36 | 54 | 2 | Valor enumerado que especifica las unidades para las resoluciones horizontales y verticales (offsets 38 y 42). El único valor definido es 0, lo que significa píxeles por metro |
38 | 56 | 2 | Padding. Ignorado y debe ser cero |
3A | 58 | 2 | Un valor enumerado indicando la dirección en la que los bits llenan el bitmap. El único valor definido es 0, lo que significa que el origen es la esquina inferior izquierda. Los bits se llenan de izquierda a derecha, luego de abajo a arriba.
Tenga en cuenta que los bitmaps de Windows (que no incluyen este campo) también pueden especificar un origen superior-izquierda (los bits llenan de izquierda a derecha, luego de arriba a abajo) utilizando un valor negativo para la altura de la imagen |
3C | 60 | 2 | Un valor enumerado indicando un algoritmo de mediatonización que debe ser utilizado al renderizar la imagen. |
40 | 64 | 4 | Parámetro de mediatonación 1 (véase infra) |
44 | 68 | 4 | Parámetro de mediatonación 2 (véase infra) |
48 | 72 | 4 | Un valor enumerado indicando la codificación de color para cada entrada en la tabla de colores. El único valor definido es 0, indicando RGB. |
4C | 76 | 4 | Un identificador definido por la aplicación. No se utiliza para renderizar imagen |
El algoritmo de medios tonos (compensación 60) puede ser:
Valor | algoritmo de semitonación | Comentarios |
---|---|---|
0 | ninguno | Más común |
1 | Difusión de errores | El parámetro de mediatoning 1 (offset 64) es el porcentaje de amortiguación de errores. 100 indica que no hay humedad. 0 indica que los errores no se difunden |
2 | PANDA: Algoritmo de procesamiento para la adquisición de documentos no codificados | Los parámetros de mediatonización 1 y 2 (offsets 64 y 68, respectivamente) representan las dimensiones X y Y, en píxeles, respectivamente, del patrón de mediatonización utilizado |
3 | Supercircle | Los parámetros de mediatonización 1 y 2 (offsets 64 y 68, respectivamente) representan las dimensiones X y Y, en píxeles, respectivamente, del patrón de mediatonización utilizado |
Tabla de colores
La tabla de colores (paleta) aparece en el archivo de imagen BMP directamente después del encabezado del archivo BMP, el encabezado DIB y después de las tres o cuatro máscaras de bits opcionales si el encabezado BITMAPINFOHEADER con la opción BI_BITFIELDS (12 bytes) o BI_ALPHABITFIELDS (16 bytes). Por lo tanto, su compensación es el tamaño del BITMAPFILEHEADER más el tamaño del encabezado DIB (más 12-16 bytes opcionales para las máscaras de tres o cuatro bits).
Nota: en Windows CE, el encabezado BITMAPINFOHEADER se puede usar con la opción BI_ALPHABITFIELDS en el miembro biCompression.
El número de entradas en la paleta es 2n (donde n es el número de bits por píxel) o un número menor especificado en el encabezado (en el OS/2 BITMAPCOREHEADER formato de encabezado, solo se admite la paleta de tamaño completo). En la mayoría de los casos, cada entrada en la tabla de colores ocupa 4 bytes, en el orden azul, verde, rojo, 0x00 (consulte las excepciones a continuación). Esto está indexado en BITMAPINFOHEADER en el miembro de estructura biBitCount.
La tabla de colores es un bloque de bytes (una tabla) que enumera los colores utilizados por la imagen. Cada píxel en una imagen de color indexada se describe mediante una cantidad de bits (1, 4 u 8) que es un índice de un solo color descrito en esta tabla. El propósito de la paleta de colores en los mapas de bits de color indexados es informar a la aplicación sobre el color real al que corresponde cada uno de estos valores de índice. El propósito de la tabla de colores en mapas de bits no indexados (no paletizados) es enumerar los colores utilizados por el mapa de bits con fines de optimización en dispositivos con capacidad de visualización de color limitada y para facilitar la futura conversión a diferentes formatos de píxeles y paletización.
Los colores en la tabla de colores generalmente se especifican en el formato RGBA32 de 4 bytes por entrada. La tabla de colores utilizada con OS/2 BITMAPCOREHEADER utiliza el formato RGB24 de 3 bytes por entrada. Para los DIB cargados en la memoria, la tabla de colores puede constar opcionalmente de entradas de 2 bytes; estas entradas constituyen índices de la paleta realizada actualmente en lugar de definiciones de color RGB explícitas.
Microsoft no impide la presencia de una máscara de bits de canal alfa válida en BITMAPV4HEADER y BITMAPV5HEADER para 1bpp, 4bpp y 8bpp imágenes en color indexadas, lo que indica que las entradas de la tabla de colores también pueden especificar un componente alfa usando el formato 8.8.8.[0-8].[0-8] a través del miembro RGBQUAD.rgbReserved. Sin embargo, algunas versiones de la documentación de Microsoft no permiten esta característica al indicar que el miembro RGBQUAD.rgbReserved "debe ser cero".
Como se mencionó anteriormente, la tabla de colores normalmente no se usa cuando los píxeles están en el formato de 16 bits por píxel (16bpp) (y superior); normalmente no hay entradas de tabla de colores en esos archivos de imagen de mapa de bits. Sin embargo, la documentación de Microsoft (en el sitio web de MSDN a partir del 16 de noviembre de 2010) especifica que para 16 bpp (y superiores), la tabla de colores puede estar presente para almacenar una lista de colores destinados a la optimización en dispositivos con capacidad de visualización de color limitada, mientras que también especifica que, en tales casos, no hay entradas de paleta indexadas en esta tabla de colores. Esto puede parecer una contradicción si no se hace distinción entre las entradas de paleta obligatorias y la lista de colores opcional.
Almacenamiento de píxeles
Los bits que representan los píxeles del mapa de bits se empaquetan en filas (también conocidas como zancadas o líneas de exploración). El tamaño de cada fila se redondea a un múltiplo de 4 bytes (un DWORD de 32 bits) mediante relleno.
Para las imágenes con una altura superior a 1, varias filas rellenas se almacenan consecutivamente, formando una matriz de píxeles.
El número total de bytes necesarios para almacenar una fila de píxeles se puede calcular como:
El número total de bytes necesarios para almacenar una matriz de píxeles en una imagen de n bits por píxel (bpp), con 2n colores, se puede calcular teniendo en cuenta el efecto de redondear el tamaño de cada fila a un múltiplo de 4 bytes, de la siguiente manera:
Array de píxeles (datos de mapa de bits)
La matriz de píxeles es un bloque de DWORD de 32 bits que describe la imagen píxel por píxel. Por lo general, los píxeles se almacenan "de abajo hacia arriba", comenzando en la esquina inferior izquierda, yendo de izquierda a derecha y luego fila por fila desde la parte inferior hasta la parte superior de la imagen. A menos que se use BITMAPCOREHEADER, los mapas de bits de Windows sin comprimir también se pueden almacenar de arriba a abajo, cuando el valor de Altura de la imagen es negativo.
En el OS/2 DIB original, los únicos cuatro valores legales de profundidad de color eran 1, 4, 8 y 24 bits por píxel (bpp). Los encabezados DIB contemporáneos permiten formatos de píxeles con 1, 2, 4, 8, 16, 24 y 32 bits por píxel (bpp). GDI+ también permite 64 bits por píxel.
Se deben agregar bytes de relleno (no necesariamente 0) al final de las filas para aumentar la longitud de las filas a un múltiplo de cuatro bytes. Cuando la matriz de píxeles se carga en la memoria, cada fila debe comenzar en una dirección de memoria que sea un múltiplo de 4. Esta restricción de dirección/compensación es obligatoria solo para las matrices de píxeles cargadas en la memoria. Para fines de almacenamiento de archivos, solo el tamaño de cada fila debe ser un múltiplo de 4 bytes, mientras que el desplazamiento del archivo puede ser arbitrario. Un mapa de bits de 24 bits con Width=1 tendría 3 bytes de datos por fila (azul, verde, rojo) y 1 byte de relleno, mientras que Width=2 tendría 6 bytes de datos y 2 bytes de relleno, Width=3 tendría 9 bytes de datos y 3 bytes de relleno, y Width=4 tendría 12 bytes de datos y sin relleno.
Compresión
- Las imágenes de color indexadas pueden ser comprimidas con un algoritmo RLE de 4 bits o 8 bits o Huffman 1D.
- OS/2 BITMAPCOREHEADER2 24bpp imágenes pueden ser comprimidas con el algoritmo RLE de 24 bits.
- Las imágenes 16bpp y 32bpp son siempre almacenado sin comprimir.
- Tenga en cuenta que las imágenes en todas las profundidades de color se pueden almacenar sin compresión si así lo desea.
Formato de píxeles
- El formato 1-bit por pixel (1bpp) soporta 2 colores distintos (por ejemplo: blanco y negro). Los valores de píxel se almacenan en cada bit, con el primer píxel (izquierda) en el bit más significativo del primer byte. Cada bit es un índice en una tabla de 2 colores. Un bit unset se refiere a la primera entrada de mesa de color, y un bit de conjunto se refiere a la última (segundo) entrada de mesa de color.
- El formato 2-bit por pixel (2bpp) admite 4 colores distintos y almacena 4 píxeles por 1 byte, el píxel más izquierdo en los dos bits más significativos (Windows CE solamente:). Cada valor pixel es un índice de 2 bits en una tabla de hasta 4 colores.
- El formato 4-bit por pixel (4bpp) admite 16 colores distintos y almacena 2 píxeles por 1 byte, el píxel más izquierdo en la nibble más significativa. Cada valor pixel es un índice de 4 bits en una tabla de hasta 16 colores.
- El formato 8-bit por pixel (8bpp) admite 256 colores distintos y almacena 1 pixel por 1 byte. Cada byte es un índice en una tabla de hasta 256 colores.
- El formato 16-bit por pixel (16bpp) admite 65536 colores distintos y almacena 1 pixel por 2-byte WORD. Cada WORD puede definir las muestras alfa, rojas, verdes y azules del píxel.
- El formato 24-bit por pixel (24bpp) admite 16.777.216 colores distintos y almacena 1 pixel valor por 3 bytes. Cada valor pixel define las muestras rojas, verdes y azules del píxel (8.8.0.0 en la notación RGBAX). Específicamente, en el orden: azul, verde y rojo (8 bits por cada muestra).
- El formato 32-bit por pixel (32bpp) soporta 4.294.967.296 colores y tiendas 1 pixel por 4-byte DWORD. Cada DWORD puede definir las muestras alfa, rojas, verdes y azules del píxel.
Para resolver la ambigüedad de qué bits definen qué muestras, los encabezados DIB proporcionan ciertos valores predeterminados, así como BITFIELDS específicos, que son máscaras de bits que definen la pertenencia de un grupo particular de bits en un píxel a un canal particular. El siguiente diagrama define este mecanismo:
Los campos de muestra definidos por las máscaras de bits BITFIELDS tienen que ser contiguos y no superpuestos, pero el orden de los campos de muestra es arbitrario. El orden de campo más común es: alfa, azul, verde, rojo (MSB a LSB). Las máscaras de bits roja, verde y azul solo son válidas cuando el miembro de compresión del encabezado DIB se establece en BI_BITFIELDS. La máscara de bits alfa es válida siempre que esté presente en el encabezado DIB o cuando el miembro de compresión del encabezado DIB se establezca en BI_ALPHABITFIELDS (solo Windows CE).
Subtipos de vídeo RGB
El mecanismo BITFIELD descrito anteriormente permite la definición de decenas de miles de formatos de píxeles diferentes, sin embargo, solo se utilizan varios de ellos en la práctica, todos los formatos paletizados RGB8, RGB4 y RGB1 (marcados en amarillo en la tabla anterior, definidos en dshow.h
.MEDIASUBTYPE nombres):
R.G.B.A.X | Subtipo RGB | R.G.B.A.X | Subtipo ARGB |
---|---|---|---|
8.8.8.0.8 | RGB32 | 8.8.8.8.0 | ARGB32 |
10.10.10.2.0 | A2R10G10B10 | ||
8.8.8.0.0 | RGB24 | 10.10.10.2.0 | A2B10G10R10 |
5.6.5.0.0 | RGB565 | 4.4.4.4.0 | ARGB44 |
5.5.5.0.1 | RGB555 | 5.5.5.1.0 | ARGB1555 |
Campo de bits | Offset | Bits A2R10G10B10 | Bits A2B10G10R10 | ||||
---|---|---|---|---|---|---|---|
Rojo | 36h | 00 00 F0 3F | LE: 3FF00000 | 20 ...29 | FF 03 00 00 | LE: 000003FF | 0 ... 9 |
Verde | 3Ah | 00 FC 0F 00 | LE: 000FFC00 | 10 ...19 | 00 FC 0F 00 | LE: 000FFC00 | 10 ...19 |
Azul | 3Eh | FF 03 00 00 | LE: 000003FF | 0 ... 9 | 00 00 F0 3F | LE: 3FF00000 | 20 ...29 |
Alfa | 42h | 00 00 00 C0 | LE: C0000000 | 30 ...31 | 00 00 00 C0 | LE: C0000000 | 30 ...31 |
En la versión 2.1.4, FFmpeg admitía (en su propia terminología) los formatos de píxeles BMP bgra, bgr24, rgb565le, rgb555le, rgb444le, rgb8, bgr8, rgb4_byte, bgr4_byte, gray, pal8, y monob; es decir, bgra era el único formato de píxel admitido con transparencia.
Ejemplo 1
A continuación se muestra un ejemplo de un mapa de bits de 24 bits y 2 × 2 píxeles (encabezado DIB de Windows BITMAPINFOHEADER) con formato de píxeles RGB24.
Offset | Tamaño | Valor hex | Valor | Descripción |
---|---|---|---|---|
BMP Header | ||||
0h | 2 | 42 4D | "BM" | Campo de identificación (42h, 4Dh) |
2h | 4 | 46 00 00 00 00 | 70 bytes (54+16) | Tamaño del archivo BMP (54 bytes header + 16 bytes data) |
6h | 2 | 00 | No utilizados | Aplicación específica |
8h | 2 | 00 | No utilizados | Aplicación específica |
Ah. | 4 | 36 00 00 00 00 | 54 bytes (14+40) | Offset donde se puede encontrar el array de pixel (datos de mapa) |
DIB Header | ||||
Eh. | 4 | 28 00 00 00 00 | 40 bytes | Número de bytes en el encabezado DIB (a partir de este punto) |
12h | 4 | 02 00 00 00 00 00 | 2 píxeles (izquierda a orden derecho) | Ancho del mapa de bits en píxeles |
16h | 4 | 02 00 00 00 00 00 | 2 píxeles (de arriba a abajo) | Altura del mapa de bits en píxeles. Positivo para el orden de pixel inferior a superior. |
1Ah | 2 | 01 00 | 1 avión | Número de planos de color que se utilizan |
1Ch | 2 | 18 00 | 24 bits | Número de bits por pixel |
1 Eh | 4 | 00 00 00 00 00 00 | 0 | BI_RGB, sin compresión de matriz de pixel utilizado |
22h | 4 | 10 00 00 00 00 00 | 16 bytes | Tamaño de los datos de mapa de bits crudos (incluyendo relleno) |
26h | 4 | 13 0B 00 00 | 2835 píxeles/metre horizontal | Imprimir resolución de la imagen, 72 DPI × 39.3701 pulgadas por metro rendimiento 2834.6472 |
2Ah | 4 | 13 0B 00 00 | 2835 píxeles/metre vertical | |
2Eh | 4 | 00 00 00 00 00 00 | 0 colores | Número de colores en la paleta |
32h | 4 | 00 00 00 00 00 00 | 0 colores importantes | 0 significa que todos los colores son importantes |
Inicio de la matriz de píxel (datos de mapa) | ||||
36h | 3 | 00 FF | 0 0 255 | Rojo, Pixel (x=0, y=1) |
39h | 3 | FF FF FF | 255 255 255 | Blanco, Pixel (x=1, y=1) |
3Ch | 2 | 00 | 0 | Colocación para alineación de 4 bytes (podría ser un valor distinto al cero) |
3Eh | 3 | FF 00 00 | 255 0 0 | Azul, Pixel (x=0, y=0) |
41h | 3 | 00 FF 00 | 0 255 0 | Verde, Pixel (x=1, y=0) |
44h | 2 | 00 | 0 | Colocación para alineación de 4 bytes (podría ser un valor distinto al cero) |
Ejemplo 2
A continuación se muestra un ejemplo de un mapa de bits de 32 bits de 4 × 2 píxeles con valores de opacidad en el canal alfa (encabezado DIB de Windows BITMAPV4HEADER) con formato de píxeles ARGB32.
Offset | Tamaño | Valor hex | Valor | Descripción |
---|---|---|---|---|
BMP Header | ||||
0h | 2 | 42 4D | "BM" | Campo de identificación (42h, 4Dh) |
2h | 4 | 9A 00 00 00 | 154 bytes (122+32) | Tamaño del archivo BMP |
6h | 2 | 00 | No utilizados | Aplicación específica |
8h | 2 | 00 | No utilizados | Aplicación específica |
Ah. | 4 | 7A 00 00 00 | 122 bytes (14+108) | Offset donde se puede encontrar el array de pixel (datos de mapa) |
DIB Header | ||||
Eh. | 4 | 6C 00 00 00 | 108 bytes | Número de bytes en el encabezado DIB (a partir de este punto) |
12h | 4 | 04 00 00 00 00 00 | 4 píxeles (izquierda a orden derecho) | Ancho del mapa de bits en píxeles |
16h | 4 | 02 00 00 00 00 00 | 2 píxeles (de arriba a abajo) | Altura del mapa de bits en píxeles |
1Ah | 2 | 01 00 | 1 avión | Número de planos de color que se utilizan |
1Ch | 2 | 20 00 | 32 bits | Número de bits por pixel |
1 Eh | 4 | 03 00 00 00 00 | 3 | BI_BITFIELDS, sin compresión de matriz de pixel utilizado |
22h | 4 | 20 00 00 00 00 | 32 bytes | Tamaño de los datos de mapa de bits crudos (incluyendo relleno) |
26h | 4 | 13 0B 00 00 | 2835 píxeles/metre horizontal | Imprimir resolución de la imagen, 72 DPI × 39.3701 pulgadas por metro rendimiento 2834.6472 |
2Ah | 4 | 13 0B 00 00 | 2835 píxeles/metre vertical | |
2Eh | 4 | 00 00 00 00 00 00 | 0 colores | Número de colores en la paleta |
32h | 4 | 00 00 00 00 00 00 | 0 colores importantes | 0 significa que todos los colores son importantes |
36h | 4 | 00 FF 00 | 00FF0000 en grande-endian | Máscara de bit de canal rojo (válido porque se especifica BI_BITFIELDS) |
3Ah | 4 | 00 FF 00 00 | 0000FF00 en finlandés | Máscara de bit de canal verde (válido porque se especifica BI_BITFIELDS) |
3Eh | 4 | FF 00 00 00 | 000 000 FF en finlandés | Máscara de bit de canal azul (válido porque se especifica BI_BITFIELDS) |
42h | 4 | 00 00 00 FF | FF000000 en grande-endian | Máscara de bit de canal alfa |
46h | 4 | 20 6E 69 57 | pequeño-endian "Win "
| LCS_WINDOWS_COLOR_SPACE |
4Ah | 24 horas | 24h* 00...00 | CIEXYZTRIPLE Color Puntos finales del espacio | Desuso para LCS "Win "o"sRGB "
|
6Eh | 4 | 00 00 00 00 00 00 | 0 Red Gamma | Desuso para LCS "Win "o"sRGB "
|
72h | 4 | 00 00 00 00 00 00 | 0 Green Gamma | Desuso para LCS "Win "o"sRGB "
|
76h | 4 | 00 00 00 00 00 00 | 0 Blue Gamma | Desuso para LCS "Win "o"sRGB "
|
Inicio del Array Pixel (los datos del mapa de bits) | ||||
7Ah | 4 | FF 00 00 7F | 255 0 0 127 | Azul (Alfa: 127), Pixel (x=0, y=1) |
7Eh | 4 | 00 FF 00 7F | 0 255 0 127 | Verde (Alfa: 127), Pixel (x=1, y=1) |
82h | 4 | 00 FF 7F | 0 0 255 127 | Rojo (Alfa: 127), Pixel (x=2, y=1) |
86h | 4 | FF FF FF 7F | 255 255 255 127 | Blanco (Alfa: 127), Pixel (x=3, y=1) |
8Ah | 4 | FF 00 00 FF | 255 0 0 255 | Azul (Alfa: 255), Pixel (x=0, y=0) |
8Eh | 4 | 00 FF 00 FF | 0 255 0 255 | Verde (Alfa: 255), Pixel (x=1, y=0) |
92h | 4 | 00 FF FF | 0 0 255 255 | Rojo (Alfa: 255), Pixel (x=2, y=0) |
96h | 4 | FF FF FF FF FF | 255 255 255 255 | Blanco (Alfa: 255), Pixel (x=3, y=0) |
Tenga en cuenta que los datos de mapa de bits comienzan en la esquina inferior izquierda de la imagen.
Uso del formato BMP
La simplicidad del formato de archivo BMP y su amplia familiaridad en Windows y en otros lugares, así como el hecho de que este formato está relativamente bien documentado y tiene un formato abierto, hace que BMP sea un formato muy común que los programas de procesamiento de imágenes de muchos Los sistemas operativos pueden leer y escribir. Los archivos ICO y CUR contienen mapas de bits que comienzan con BITMAPINFOHEADER.
Muchas interfaces gráficas de usuario más antiguas usaban mapas de bits en sus subsistemas de gráficos integrados; por ejemplo, las plataformas Microsoft Windows y OS/2' Subsistema GDI, donde el formato específico utilizado es el formato de archivo de mapa de bits de Windows y OS/2, generalmente denominado con la extensión de archivo .BMP
.
Si bien la mayoría de los archivos BMP tienen un tamaño de archivo relativamente grande debido a la falta de compresión (o, en general, a la codificación de longitud de ejecución de baja relación en imágenes paletizadas), muchos archivos BMP se pueden comprimir considerablemente con algoritmos de compresión de datos sin pérdida como ZIP porque contienen datos redundantes. Algunos formatos, como RAR, incluso incluyen rutinas dirigidas específicamente a la compresión eficiente de dichos datos.
Formatos relacionados
El sistema X Window utiliza un formato XBM similar para imágenes en blanco y negro y XPM (mapa de píxeles) para imágenes en color. También hay una variedad de "en bruto" formatos, que guardan datos sin procesar sin otra información. Los formatos Portable Pixmap (PPM) y Truevision TGA también existen, pero se usan con menos frecuencia, o solo para propósitos especiales; por ejemplo, TGA puede contener información de transparencia.
Contenido relacionado
Servicios integrados
Exim
EBurro2000