Análisis de formato BMP

El formato de archivo de mapa de bits (archivo de mapa de bits, BMP) es un formato de almacenamiento de archivos de imagen adoptado por Windows, y todo el software de procesamiento de imágenes que se ejecuta en el entorno de Windows admite este formato. El formato de archivo de mapa de bits BMP anterior a Windows 3.0 está relacionado con el dispositivo de visualización, por lo que se denomina formato de archivo de mapa de bits dependiente del dispositivo (mapa de bits dependiente del dispositivo, DDB). El formato de archivo de mapa de bits BMP posterior a Windows 3.0 no tiene nada que ver con el dispositivo de visualización, por lo que este formato de archivo de mapa de bits BMP se denomina formato de mapa de bits independiente del dispositivo (mapa de bits independiente del dispositivo, DIB), el propósito es permitir que Windows se muestre en cualquier tipo El archivo de mapa de bits BMP se muestra en el dispositivo.
      Se puede considerar que un archivo de mapa de bits consta de cuatro partes: un encabezado de archivo de mapa de bits, un encabezado de información de mapa de bits, una tabla de colores y una matriz de bytes que define el mapa de bits. Los archivos BMP se pueden abrir en modo de apertura de texto.
(1) Bloque de información del encabezado del archivo
0000-0001: identificación del archivo, que es la letra del código ASCII "BM", 42 4D. O compare con 19778.
0002-0005: el tamaño de todo el archivo, en bytes. Primero el byte bajo.
0006-0009: reservado, complete cada byte con "00".
000A-000D: registra la posición inicial del área de datos de imagen. El desplazamiento desde el principio del archivo hasta los datos del mapa de bits. 
(2) Bloque de información de descripción de imagen
000E-0011: El tamaño del bloque de información de descripción de imagen, normalmente 28H.
0012-0015: ancho de la imagen. En píxeles. Primero el byte bajo.
0016-0019: altura de la imagen. En píxeles. Primero el byte bajo.
001A-001B: El número total de planos de la imagen (constantemente 1).
001C-001D: El número de dígitos de los píxeles de grabación, un valor muy importante, y el número de colores de la imagen está determinado por este valor.
1 mapa de bits monocromo, mapa de bits de 4-16
colores, mapa de bits de
8-256 colores, mapa de bits
F-16, mapa
de bits RGB565 de 10-16 bits, mapa de bits de 18-24 bits
(color verdadero), mapa de bits de 20-32
bits.
001E-0021: Método de compresión de datos (valor bit 0: sin compresión; 1: compresión de 8 bits; 2: compresión de 4 bits; 3: compresión de campos de bits).
0022-0025: el tamaño de los datos del área de la imagen. Byte unitario, el número debe ser múltiplo de 4.
0026-0029: cuántos píxeles hay por metro en el nivel, en el mapa de bits independiente del dispositivo (.DIB), cada byte se rellena con 00H.
002A-002D: cuántos píxeles hay por metro verticalmente, en el mapa de bits independiente del dispositivo (.DIB), cada byte se rellena con 00H.
002E-0031: el número de colores utilizados en esta imagen.
0032-0035: especifique el número de colores importantes. Cuando el valor de este campo es igual al número de colores (o igual a 0), significa que todos los colores son igualmente importantes.
     Como se indicó anteriormente, el encabezado de información de todo el mapa de bits tiene un total de 54 bytes y cada posición tiene un significado específico.
(3) Tabla de colores (paleta)
      El tamaño de la tabla de colores depende del modo de color utilizado, en el que cada 4 bytes representa un color, y es B (azul), G (verde), R (rojo), alfa (el valor de transparencia de un 32 bits mapa de bits), generalmente no es necesario). El tamaño de la tabla de colores depende del modo de color utilizado: la imagen de 2 colores es de 8 bytes; la imagen de 16 colores es de 64 bytes; la imagen de 256 colores es de 1024 bytes. Entre ellos, cada 4 bytes representa un color y B (azul), G (verde), R (rojo), alfa (el valor de transparencia de un mapa de bits de 32 bits, generalmente no es obligatorio). Es decir, los primeros 4 bytes representan el color del color número 1 y el siguiente representa el color del color número 2, y así sucesivamente.   
      Para imágenes de color verdadero de 24 bits, la tabla de colores no se usa (también incluye mapas de bits de 16 y 32 bits), porque el valor RGB en el mapa de bits representa el color de cada píxel; y para aquellos que usan colores indexados, necesita una paleta más grande.
(4) La
       tabla de colores del área de datos de imagen La siguiente es el área de datos de imagen del archivo de mapa de bits. En esta parte, se registra el número de índice de color correspondiente a cada píxel. El método de grabación también depende del modo de color. 1 bit (8 bits son 1 byte); la imagen de 16 colores ocupa 4 bits por punto (nibble); la imagen de 256 colores ocupa 8 bits por punto (1 byte); la imagen de color verdadero ocupa 24 bits por punto (3 palabras) ). Por lo tanto, el tamaño de toda el área de datos también cambiará en consecuencia. En términos de la ley, se puede obtener la siguiente fórmula de cálculo: tamaño de la información de los datos de la imagen = (ancho de la imagen * altura de la imagen * número de píxeles grabados) / 8. La línea de exploración se almacena de abajo hacia arriba, es decir, el primer byte de la matriz representa el píxel en la esquina inferior izquierda del mapa de bits y el último byte representa el píxel en la esquina superior derecha del mapa de bits.
       Sin embargo, el tamaño del área de información de la imagen sin comprimir. Excepto por el modo de color verdadero, el resto son mayores o iguales al tamaño de la información de los datos. ¿Por qué es esto? Hay dos razones:
El archivo BMP registra una línea de imagen en bytes. Por lo tanto, no hay ningún punto representado por la información de bits de datos en un byte en dos filas diferentes. En otras palabras, establezca el modo de visualización en 16 colores. Cuando se asignan dos puntos de información a cada byte, si el ancho de la imagen es impar, la información del último píxel ocupará un byte y los últimos 4 bits de este byte no tendrá sentido. El siguiente byte comenzará a registrar la información de la siguiente línea. 
(5) Análisis de casos

     El siguiente mapa de bits de 4x4 píxeles

Después de que UE se abre en un archivo hexadecimal, la pantalla es la siguiente:

Podemos verificar cada parte de la información analizada anteriormente buscando los bits de datos correspondientes. Esto lo aclara más.
El formato de datos de color verdadero de 24 bits es B (8 bits) G (8 bits) R (8 bits), que es causado por el byte bajo primero. 
Estructura (6) Operaciones de mapa de bits usados comúnmente en 
      la cabecera de la estructura de archivos de mapa de bits:
typedef struct tagBITMAPFILEHEADER {      Corto bfType;      int bfSize;      Corto bfReserved1;      Corto bfReserved2;      bfOffBits int; } la BITMAPFILEHEADER, * PBITMAPFILEHEADER;       bitmap estructura de información: typedef struct tagBITMAPINFOHEADER {       int biSize;       int biWidth;       int biHeight; biplanos       cortos ; biBitCount       corto;       int biCompression;       int biSizeImage;       int biXPelsPerMeter;       int biYPelsPerMeter;

















      int biClrUsed;
      int biClrImportant;
} BITMAPINFOHEADER, * PBITMAPINFOHEADER;
 (7) Orden de
exploración El orden de exploración del mapa de bits BMP es desde la esquina inferior izquierda de la imagen de izquierda a derecha, de abajo hacia arriba para explorar

Referencia del texto original: http://blog.csdn.net/jsjjms/archive/2007/04/18/1568615.aspx

Supongo que te gusta

Origin blog.csdn.net/kh815/article/details/87985673
Recomendado
Clasificación