Heim > Backend-Entwicklung > C++ > Wie erstelle ich ein monochromatisches BMP-Bild aus einer Booleschen Matrix in reinem C/C ohne externe Bibliotheken?

Wie erstelle ich ein monochromatisches BMP-Bild aus einer Booleschen Matrix in reinem C/C ohne externe Bibliotheken?

DDD
Freigeben: 2024-11-29 17:16:10
Original
521 Leute haben es durchsucht

How to Create a Monochromatic BMP Image from a Boolean Matrix in Pure C/C   Without External Libraries?

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:

  • „BM“-Signatur: Identifiziert die Datei als BMP-Bild (2 Bytes).
  • Dateigröße: Größe der BMP-Datei in Bytes (4 Bytes).
  • Offset zu Pixeldaten: Position der Bilddaten innerhalb der Datei (4 Bytes).
  • BITMAPINFOHEADER: Enthält zusätzliche Informationen zum Bild, wie Breite, Höhe, Anzahl der Farbebenen und Bittiefe (40 Bytes).

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage