BMP-Bild in reinem C/C ohne externe Bibliotheken schreiben
Beim Erstellen einer Ausgabe mit einer booleschen Matrix besteht die Notwendigkeit, sie hineinzuschreiben Es entsteht eine BMP-Datei. Dabei wird ein monochromes Bild mit weiß markierten Pixeln erstellt, wenn das entsprechende Matrixelement wahr ist. Die Herausforderung besteht weiterhin darin, die BMP-Header-Struktur und ihren Schreibprozess zu verstehen.
Um dieses Problem zu lösen, besteht eine Lösung darin, drei 2D-Arrays zu erstellen: Rot, Grün und Blau, die jeweils Pixelwerte basierend auf der Matrix darstellen. Der folgende Code demonstriert den Ansatz:
FILE *f; unsigned char *img = NULL; int filesize = 54 + 3 * w * h; // Width and height represented as w and h 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++) { int x = i, y = (h - 1) - j; // Flipping the image vertically int r = red[i][j] * 255; int g = green[i][j] * 255; int b = blue[i][j] * 255; // Clamping RGB values between 0-255 if (r > 255) r = 255; if (g > 255) g = 255; if (b > 255) b = 255; 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); } } // Define BMP headers 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}; // Populate BMP header values 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); // Padding to ensure 4-byte alignment } free(img); fclose(f);
Dieser Ansatz bietet eine umfassende Lösung zum Schreiben einer BMP-Datei aus einer booleschen Matrix, ohne auf externe Bibliotheken angewiesen zu sein. Die Header-Struktur ist sorgfältig definiert und der Code gewährleistet die richtige Pixelformatierung und -auffüllung, was zu einem gültigen BMP-Bild führt, das von Standard-Bildbetrachtern geöffnet werden kann.
Das obige ist der detaillierte Inhalt vonWie schreibe ich ein BMP-Bild aus einer Booleschen Matrix in reinem C/C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!