Formato de archivo BMP

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Windows Bitmap imagen archivo formato familia

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

Diagram 1 – The structure of the bitmap image file
Diagrama 1 – La estructura del archivo de imagen bitmap

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
000 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:
BM
Windows 3.1x, 95, NT, etc.
BA
OS/2 struct bitmap array
CI
OS/2 struct icono de color
CP
OS/2 const color puntero
IC
OS/2 icono de estructura
PT
OS/2 pointer
022 4 bytes El tamaño del archivo BMP en bytes
066 2 bytes Reservado; el valor real depende de la aplicación que crea la imagen, si se crea manualmente puede ser 0
088 2 bytes Reservado; el valor real depende de la aplicación que crea la imagen, si se crea manualmente puede ser 0
0A10 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.

Windows y OS/2 bitmap headers
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 OS22XBITMAPHEADEROS/2 BITMAPCOREHEADER2 Agrega la mediatonización. Añade compresión RLE y Huffman 1D.
16 OS22XBITMAPHEADEREsta 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 BITMAPINFOHEADERWindows 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 BITMAPV2INFOHEADERIndocumentados Añade máscaras RGB bit. Adobe Photoshop
56 BITMAPV3INFOHEADERNo 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 BITMAPV4HEADERWindows NT 4.0, 95 o posterior Añade tipo de espacio de color y corrección gamma
124 BITMAPV5HEADERWindows 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
0E14 4 El tamaño de este encabezado (12 bytes)
1218 2 El ancho del mapa de bits en píxeles (sin asignar 16 bits)
1420 2 La altura del mapa de bits en píxeles (sin asignar 16 bits)
1622 2 El número de planos de color, debe ser 1
1824 2 El número de bits por pixel
OS/2 1.x bitmaps son incomprensibles y no pueden ser 16 o 32 bpp.

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
0E14 4 el tamaño de este encabezado, en bytes (40)
1218 4 el ancho del mapa de bits en píxeles (integer señalizado)
1622 4 la altura del mapa de bits en píxeles (integer señalizado)
1A26 2 el número de planos de color (debe ser 1)
1C28 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.
1E30 4 el método de compresión que se utiliza. Vea la siguiente tabla para una lista de posibles valores
2234 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.
2638 4 la resolución horizontal de la imagen. (pixel por metro, entero firmado)
2A42 4 la resolución vertical de la imagen. (pixel por metro, entero firmado)
2E46 4 el número de colores en la paleta de colores, o 0 por defecto a 2n
3250 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_RGBninguno Más común
1 BI_RLE8RLE 8-bit/pixel Se puede utilizar sólo con mapas de bits 8-bit/pixel
2 BI_RLE4RLE 4-bit/pixel Se puede utilizar sólo con mapas de bits 4-bit/pixel
3 BI_BITFIELDSOS22XBITMAPHEADERHuffman 1D BITMAPV2INFOHEADER: máscaras de campo de bits RGB,
BITMAPV3INFOHEADER+: RGBA
4 BI_JPEGOS22XBITMAPHEADERRLE-24 BITMAPV4INFOHEADER+: Imagen JPEG para impresión
5 BI_PNGBITMAPV4INFOHEADER+: Imagen PNG para imprimir
6 BI_ALPHABITFIELDSMáscaras de campo poco RGBA sólo Windows CE 5.0 con. NET 4.0 o posterior
11 BI_CMYKninguno sólo Windows Metafile CMYK
12 BI_CMYKRLE8RLE-8 sólo Windows Metafile CMYK
13 BI_CMYKRLE4RLE-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)
3654 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
3856 2 Padding. Ignorado y debe ser cero
3A58 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

3C60 2 Un valor enumerado indicando un algoritmo de mediatonización que debe ser utilizado al renderizar la imagen.
4064 4 Parámetro de mediatonación 1 (véase infra)
4468 4 Parámetro de mediatonación 2 (véase infra)
4872 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.
4C76 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:

RowSize=⌈BitsPerPixel⋅ ⋅ ImageWidth32⌉⋅ ⋅ 4=⌊BitsPerPixel⋅ ⋅ ImageWidth+3132⌋⋅ ⋅ 4,{displaystyle {text{RowSize}=leftlceil {frac {text{BitsPerPixel}}cdot {text{ImageWidth}}{32}}rightrceil}} {f}}}} {f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f}f} cdot 4=leftlfloor {frac {text{BitsPerPixel}cdot {text{ImageWidth}}}+31}{32}rightrfloor cdot 4,}

ImageWidth se expresa en píxeles. La ecuación anterior utiliza las funciones de suelo y techo.

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:

PixelArraySize=RowSize⋅ ⋅ SilencioImagenAlturaSilencio{displaystyle {text{PixelArraySize}={text{RowSize}cdot Silencio.

ImagenAltura se expresa en píxeles. El valor absoluto es necesario porque ImagenAltura se expresa como un número negativo para las imágenes de arriba hacia abajo.

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:

Diag. 2 – The BITFIELDS mechanism for a 32-bit pixel depicted in RGBAX sample length notation
Diag. 2 – El mecanismo BITFIELDS para un píxel de 32 bits representado en la notación de longitud de muestra RGBAX

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).

Diag. 3 – The pixel format with an alpha channel for a 16-bit pixel (in RGBAX sample Length notation) actually generated by Adobe Photoshop[22]
Diag. 3 – El formato pixel con un canal alfa para un píxel de 16 bits (en la notación de la longitud de la muestra RGBAX) generado por Adobe Photoshop
All of the possible pixel formats in a DIB
Todos los posibles formatos de píxel en un DIB

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):

RGB sin receta Subtipos de vídeo
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
Campos de bits para 10 bits RGB
Campo de bits Offset Bits A2R10G10B10 Bits A2B10G10R10
Rojo 36h 00 00 F0 3FLE: 3FF0000020...29FF 03 00 00LE: 000003FF 0... 9
Verde 3Ah 00 FC 0F 00LE: 000FFC0010...1900 FC 0F 00LE: 000FFC0010...19
Azul 3Eh FF 03 00 00LE: 000003FF 0... 900 00 F0 3FLE: 3FF0000020...29
Alfa 42h 00 00 00 C0LE: C000000030...3100 00 00 C0LE: C000000030...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 de un bitmap 2×2 pixel, con 24 bits/pixel encoding

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)
0,0: blue 0000FF FF0,1: green 00FF00 FF0,2: red FF00000 FF0,3: white FFFFFF FF1,0: blue 0000FF 7F, half transparent1,1: green 00FF00 7F, half transparent1,2: red FF0000 7F, half transparent1,3: white FFFFFF 7F, half transparent
About this image
Ejemplo 2 de un bitmap de 4×2 pixel, con 32 bits/pixel encoding

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

En redes informáticas, servicios integrados o IntServ es una arquitectura que especifica los elementos para garantizar la calidad de servicio en las redes....

Exim

Exim es un agente de transferencia de correo utilizado en sistemas operativos similares a Unix. Exim es software libre distribuido bajo los términos de la...

EBurro2000

eDonkey2000 era una aplicación de intercambio de archivos punto a punto desarrollada por la empresa estadounidense MetaMachine utilizando Multisource File...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save