Maison >développement back-end >C++ >Comment créer des images BMP monochromes à partir de matrices booléennes en C/C pur sans bibliothèques externes ?

Comment créer des images BMP monochromes à partir de matrices booléennes en C/C pur sans bibliothèques externes ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-03 20:58:11513parcourir

How to Create Monochrome BMP Images from Boolean Matrices in Pure C/C   Without External Libraries?

Écrire des images BMP en C/C pur sans bibliothèques externes

Dans certains algorithmes de calcul, la création de sorties visuelles peut être essentielle pour l'analyse et la présentation . Lorsqu'il s'agit de matrices booléennes, la génération d'images BMP monochromes peut être une méthode appropriée pour visualiser les données. Cependant, construire une image BMP à partir de zéro sans recourir à des bibliothèques externes peut sembler intimidant.

Cette tâche implique de définir l'en-tête de l'image et d'organiser les données de pixels dans un format spécifique. L'en-tête BMP fournit des informations cruciales sur l'image, notamment sa largeur, sa hauteur et sa profondeur de couleur. Pour une image monochrome, chaque pixel peut être représenté par un seul bit, indiquant sa couleur (blanc ou noir).

Voici un extrait de code détaillé qui montre comment écrire une matrice booléenne sous forme d'image BMP monochrome en utilisant du pur C/C :

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {
    // Image dimensions
    int width = 100, height = 100;

    // Boolean matrix representing the image data
    bool matrix[width][height];

    // File pointer for writing the BMP image
    FILE* f = fopen("image.bmp", "wb");

    // BMP file header
    unsigned char bmpfileheader[14] = {'B','M', 0,0,0,0, 0,0, 0,0, 54,0,0,0};

    // BMP image data header
    unsigned char bmpinfoheader[40] = {40,0,0,0, 0,0,0,0, 0,0,0,0, 1,0, 1,0};

    // Set file size in header
    bmpfileheader[ 2] = (width + 7) / 8 * height;

    // Adjust image width and height in header
    bmpinfoheader[ 4] = width;
    bmpinfoheader[ 8] = height;

    // Write the BMP header and image data
    fwrite(bmpfileheader, 1, 14, f);
    fwrite(bmpinfoheader, 1, 40, f);

    // Iterate over the matrix and write each row as a bitmask
    for (int i = 0; i < height; i++) {
        // Create a bitmask for the current row
        unsigned char rowdata = 0;

        for (int j = 0; j < width; j++) {
            if (matrix[j][i]) {
                // Set the corresponding bit in the bitmask
                rowdata |= 1 << (7 - j);
            }
        }

        fwrite(&rowdata, 1, 1, f);
    }

    fclose(f);

    return 0;
}

Dans ce code, l'en-tête BMP inclut la largeur et la hauteur de l'image dans le cadre des données d'en-tête. Après avoir écrit l'en-tête, le code parcourt chaque ligne de la matrice booléenne et construit un masque de bits pour représenter les valeurs de pixels correspondantes. Chaque bit du masque de bits indique si le pixel est blanc ou noir. En écrivant ces masques de bits de manière séquentielle, le fichier BMP généré affichera avec précision la matrice booléenne sous forme d'image monochrome.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn