BMP-Bild in reinem C/C ohne externe Bibliotheken schreiben
Bei der Entwicklung von Algorithmen, die eine Informationsausgabe erfordern, ist es notwendig, Ausgaben in zu generieren verschiedene Formate. Ein gängiges Format ist ein BMP-Bild. Dieser Artikel befasst sich mit dem Problem der Erstellung eines monochromatischen BMP-Bildes aus einer booleschen Matrix, in der echte Elemente als weiße Pixel dargestellt werden.
BMP-Header-Struktur
Ein BMP (Bitmap Die Datei „Image“ besteht aus einem Header-Abschnitt, gefolgt von den Bilddaten. Der Header enthält wichtige Informationen zu den Abmessungen, der Farbtiefe und dem Komprimierungsformat des Bildes. Hier ist eine Aufschlüsselung der Hauptkomponenten:
Code So generieren Sie ein BMP-Bild aus einer Booleschen Matrix
Der folgende Codeausschnitt zeigt, wie Sie ein BMP-Bild aus einer erstellen boolesche Matrix, ohne auf externe Bibliotheken angewiesen zu sein:
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);
Indem Sie die in diesem Code beschriebenen Schritte befolgen, können Sie erfolgreich ein monochromatisches BMP-Bild aus einer booleschen Matrix generieren und so die Ergebnisse Ihres Algorithmus visualisieren und ausgeben.
Das obige ist der detaillierte Inhalt vonWie erstelle ich ein monochromatisches BMP-Bild aus einer Booleschen Matrix in reinem C/C ohne externe Bibliotheken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!