Heim > Backend-Entwicklung > C++ > Wie erstelle ich ein monochromes BMP-Bild aus einer Booleschen Matrix in Pure C/C?

Wie erstelle ich ein monochromes BMP-Bild aus einer Booleschen Matrix in Pure C/C?

DDD
Freigeben: 2024-12-10 07:49:09
Original
572 Leute haben es durchsucht

How to Create a Monochrome BMP Image from a Boolean Matrix in Pure C/C  ?

Erstellen eines monochromatischen BMP-Bildes in reinem C/C

Bitmap-Bilddateien werden häufig zum Speichern digitaler Bilder verwendet. In diesem Artikel geht es um die Notwendigkeit, eine boolesche Matrix in eine monochrome BMP-Datei zu schreiben, wobei Pixel auf Weiß gesetzt werden, wenn das entsprechende Matrixelement wahr ist.

Den BMP-Header verstehen

Das BMP-Dateiformat hat eine spezifische Header-Struktur, die wesentliche Informationen über das Bild enthält. Der Header besteht aus zwei Teilen: dem Dateiheader und dem Informationsheader.

Der Dateiheader

  • Größe (14 Bytes): Die Größe der Datei in Bytes.
  • Identifier (2 Bytes):Die Signatur „BM“, um die Datei als BMP zu identifizieren.
  • Reserviert (4 Bytes):Reserviert für zukünftige Verwendung (auf Null gesetzt).
  • Offset auf die Bilddaten (4 Bytes): Der Versatz in Bytes vom Anfang der Datei bis zum Anfang des Pixels Daten.

Der Informationsheader

  • Größe (40 Bytes):Die Größe des Informationsheaders.
  • Breite (4 Bytes): Die Breite des Bildes in Pixel.
  • Höhe (4 Bytes): Die Höhe des Bildes in Pixeln.
  • Ebenen (2 Bytes): Immer auf 1 setzen .
  • Bitanzahl (2 Bytes): 1 Bit pro Pixel für Monochrom Bilder.
  • Komprimierung (4 Bytes): 0 für unkomprimiert.
  • Größe der Bilddaten (4 Bytes): Die Größe des Pixels Daten in Bytes.
  • XPelsPerMeter und YPelsPerMeter (jeweils 4 Bytes): Horizontale und vertikale Auflösung des Bildes in Pixel pro Meter.
  • Farbpalette (4 Bytes): Die Anzahl der Farben in der Palette (bei monochromen Bildern auf 0 gesetzt).
  • Wichtige Farben (4 Bytes): Die Anzahl der wichtigen Farben in der Palette (für Monochrom auf 0 gesetzt). Bilder).

Erstellen des monochromen BMP

So erstellen Sie das monochrome BMP:

  1. Berechnen Sie die Dateigröße und den Versatz zu die Bilddaten.
  2. Initialisieren Sie den Datei-Header und den Informations-Header entsprechend Werte.
  3. Erstellen Sie ein 2D-Array von booleschen Werten, die die Matrix darstellen.
  4. Konvertieren Sie die booleschen Werte in Pixelwerte (0 für falsch und 255 für wahr).
  5. Schreiben Sie die Datei Header in die Datei.
  6. Schreiben Sie den Informationsheader in die Datei.
  7. Iterieren Durchsuchen Sie die Pixeldaten und schreiben Sie sie in die Datei.
  8. Füllen Sie jede Zeile mit einem Vielfachen von 4 Bytes auf, um die Ausrichtung sicherzustellen.
  9. Schließen Sie die Datei.

Beispielcode

Der folgende C/C-Code demonstriert die Erstellung eines monochromen BMP aus einem booleschen Wert Matrix:

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

Dieser Code verwendet eine boolesche Matrix und erstellt ein monochromes BMP-Bild mit einer angegebenen Breite (B) und Höhe (H). Es wandelt die booleschen Werte in Pixelwerte um und schreibt die BMP-Datei auf die Festplatte.

Das obige ist der detaillierte Inhalt vonWie erstelle ich ein monochromes BMP-Bild aus einer Booleschen Matrix in Pure C/C?. 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