Écriture d'une image BMP en C/C pur sans bibliothèques externes
Lors du développement d'algorithmes nécessitant une sortie d'informations, il devient nécessaire de générer des sorties dans divers formats. Un format courant est une image BMP. Cet article aborde le problème de la création d'une image BMP monochromatique à partir d'une matrice booléenne, où les vrais éléments sont représentés sous forme de pixels blancs.
Structure d'en-tête BMP
Un BMP (Bitmap Image) se compose d’une section d’en-tête suivie des données d’image. L'en-tête contient des informations vitales sur les dimensions de l'image, la profondeur des couleurs et le format de compression. Voici une répartition des principaux composants :
Code pour générer une image BMP à partir d'une matrice booléenne
L'extrait de code suivant montre comment créer une image BMP à partir d'un matrice booléenne sans recourir à des bibliothèques externes :
FILE *f; unsigned char *img = NULL; int filesize = 54 + 3*w*h; // w and h are image width and height // Allocate memory for image data img = (unsigned char *)malloc(3*w*h); memset(img,0,3*w*h); // Fill img byte array with pixel data for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) { int x = i, y = (h-1)-j; int r, g, b; // Color components // Set pixel color based on matrix element if (matrix[i][j]) { r = g = b = 255; // White pixel } else { r = g = b = 0; // Black pixel } // Write pixel color components to image data array 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); } } // Set BMP header values 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}; // Update file size bmpfileheader[ 2] = (unsigned char)(filesize ); bmpfileheader[ 3] = (unsigned char)(filesize>> 8); bmpfileheader[ 4] = (unsigned char)(filesize>>16); bmpfileheader[ 5] = (unsigned char)(filesize>>24); // Update image width and height 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); // Save BMP image to file 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); // Pad to 4-byte boundary } // Free resources free(img); fclose(f);
En suivant les étapes décrites dans ce code, vous pouvez générer avec succès une image BMP monochromatique à partir d'une matrice booléenne, offrant ainsi un moyen de visualiser et de générer les résultats de votre algorithme.
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!