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: