Création d'une image BMP monochromatique en Pure C/C
Les fichiers d'images bitmap sont largement utilisés pour stocker des images numériques. Cet article répond à la nécessité d'écrire une matrice booléenne dans un fichier BMP monochrome, où les pixels sont définis en blanc si l'élément de matrice correspondant est vrai.
Comprendre l'en-tête BMP
Le format de fichier BMP a une structure d'en-tête spécifique qui contient des informations essentielles sur l'image. L'en-tête se compose de deux parties : l'en-tête du fichier et l'en-tête d'information.
L'en-tête du fichier
L'en-tête d'information
Création du BMP monochrome
Pour créer le BMP monochrome :
Exemple de code
Le code C/C suivant démontre la création d'un BMP monochrome à partir d'un booléen matrice :
#include <stdio.h> #include <stdlib.h> int main() { FILE *f; unsigned char *img = NULL; int filesize = 54 + 3*w*h; //w is your image width, h is image height, both int img = (unsigned char *)malloc(3*w*h); memset(img,0,3*w*h); for(int i=0; i<w; i++) { for(int j=0; j<h; j++) { bool = matrix[i][j] x=i; y=(h-1)-j; r = bool? 255 : 0; g = bool? 255 : 0; b = bool? 255 : 0; img[(x+y*w)*3+2] = (unsigned char)(r); img[(x+y*w)*3+1] = (unsigned char)(g); img[(x+y*w)*3+0] = (unsigned char)(b); } } unsigned char bmpfileheader[14] = {'B','M', 0,0,0,0, 0,0, 0,0, 54,0,0,0}; unsigned char bmpinfoheader[40] = {40,0,0,0, 0,0,0,0, 0,0,0,0, 1,0, 24,0}; unsigned char bmppad[3] = {0,0,0}; bmpfileheader[ 2] = (unsigned char)(filesize ); bmpfileheader[ 3] = (unsigned char)(filesize>> 8); bmpfileheader[ 4] = (unsigned char)(filesize>>16); bmpfileheader[ 5] = (unsigned char)(filesize>>24); bmpinfoheader[ 4] = (unsigned char)( w ); bmpinfoheader[ 5] = (unsigned char)( w>> 8); bmpinfoheader[ 6] = (unsigned char)( w>>16); bmpinfoheader[ 7] = (unsigned char)( w>>24); bmpinfoheader[ 8] = (unsigned char)( h ); bmpinfoheader[ 9] = (unsigned char)( h>> 8); bmpinfoheader[10] = (unsigned char)( h>>16); bmpinfoheader[11] = (unsigned char)( h>>24); f = fopen("img.bmp","wb"); fwrite(bmpfileheader,1,14,f); fwrite(bmpinfoheader,1,40,f); for(int i=0; i<h; i++) { fwrite(img+(w*(h-i-1)*3),3,w,f); fwrite(bmppad,1,(4-(w*3)%4)%4,f); } free(img); fclose(f); return 0; }
Ce code prend une matrice matricielle booléenne et crée une image BMP monochrome avec une largeur (w) et une hauteur (h) spécifiées. Il convertit les valeurs booléennes en valeurs de pixels et écrit le fichier BMP sur le disque.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!