Profundidad de bits de imagen y método de conversión

Formato de archivo de mapa de bits:

  ① Encabezado del archivo de mapa de bits, la estructura utilizada: BITMAPFILEHEADER, que ocupa 14 bytes

  ② Encabezado de información de mapa de bits, la estructura utilizada: BITMAPINFOHEADER, que ocupa 40 bytes

  ③ Elemento de la tabla de colores, la estructura utilizada: RGBQUAD, determinada por el valor biBitCount

  ④ Área de datos, cuando la variable miembro en la estructura BITMAPINFOHEADER

Cuando biBitCount = 1, 1 byte representa 8 píxeles;

Cuando biBitCount = 2, 1 byte representa 2 píxeles;

Cuando biBitCount = 8, 1 byte representa 1 píxel;

Cuando biBitCount = 16, 2 bytes representan 1 píxel;

Cuando biBitCount = 24, 3 bytes representan 1 píxel;

La definición de la estructura RGBQUAD es la siguiente:

typedef struct tagRGBQUAD {
BYTE    rgbBlue;                // 蓝色分量 
BYTE    rgbGreen;              // 绿色分量 
BYTE    rgbRed;                // 红色分量 
BYTE    rgbReserved;        // 保留值,必须为0.
} RGBQUAD;
 

Es decir, una estructura RGBQUAD ocupa 4 bytes,

Cuando biBitCount = 1, 2, 4, 8, los elementos de la tabla de colores ocupan el espacio de 2, 4, 16, 256 tamaño de estructura RGBQUAD respectivamente;

Cuando biBitCount = 24, ③ los elementos de la tabla de colores no ocupan espacio, es decir, el archivo de mapa de bits solo tiene ①②④ tres elementos, esto se debe a que 3 bytes en el área de datos representan un píxel, que a su vez contiene los tres valores del componente de color primario.

Cuestiones a tener en cuenta:

    1. Cuando se almacenan datos bmp, se escanean de izquierda a derecha por fila y de abajo hacia arriba por columna, por lo que para un archivo bmp de 24 bits, los primeros tres bytes del área de datos representan el primer elemento en la esquina inferior izquierda del mapa de bits;

2. El número de bytes que ocupa cada línea de los datos de imagen almacenados en el archivo bmp es un múltiplo entero de 4, y si no es suficiente, se complementa con 0, por lo que hay

biSizeImage = ((((bi.Width*bitBitCount)+31)&~31)/8)*bi.biHeight

    3. Para un archivo bmp de 24 bits, si el número de bytes que ocupan los píxeles en cada fila de la imagen cumple la condición de que sea un número entero múltiplo de 4, dado que el número total de bytes que ocupan BITMAPFILEHEADER y BITMAPINFOHEADER es 54, que no es un múltiplo de 4, serán 56 bytes después de rellenar con 0.

Comprensión personal:

         Un recuento de bibits de 1, 2, 4, 8 significa que la profundidad de color de cada píxel es 2^n, es decir, la profundidad de la tabla de colores a la que cada píxel debe referirse es respectivamente 2, 4, 16, 256. En términos generales, si el recuento de bits es 8, la profundidad de su píxel es 256. Si su valor de píxel es 127 en este momento, entonces debe buscarse en la tabla de colores y el tamaño de la tabla de colores está listo para venir fuera

        En segundo lugar, para diferentes mapas de bits, puede editarlos a través del dibujo que viene con el sistema de Windows. Al guardar después de editar, puede elegir lo siguiente:

        

 

        

Supongo que te gusta

Origin blog.csdn.net/cyy1104/article/details/130579557
Recomendado
Clasificación