ホームページ > バックエンド開発 > C++ > 外部ライブラリを使用せずに Pure C/C でブール行列から単色 BMP イメージを作成するにはどうすればよいですか?

外部ライブラリを使用せずに Pure C/C でブール行列から単色 BMP イメージを作成するにはどうすればよいですか?

DDD
リリース: 2024-11-29 17:16:10
オリジナル
521 人が閲覧しました

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

外部ライブラリを使用しない Pure C/C での BMP イメージの書き込み

情報出力が必要なアルゴリズムを開発する場合、出力を生成する必要があります。さまざまな形式。一般的な形式の 1 つは BMP 画像です。この記事では、真の要素が白いピクセルとして表される、ブール行列から単色の BMP イメージを作成する問題について説明します。

BMP ヘッダー構造

BMP (ビットマップ) Image) ファイルは、ヘッダー セクションとそれに続く画像データで構成されます。ヘッダーには、画像のサイズ、色深度、圧縮形式に関する重要な情報が含まれています。主なコンポーネントの内訳は次のとおりです。

  • 「BM」署名: ファイルを BMP 画像 (2 バイト) として識別します。
  • ファイル サイズ: BMP ファイルのサイズ (バイト単位) (4 バイト).
  • ピクセル データへのオフセット: ファイル内の画像データの場所 (4
  • BITMAPINFOHEADER: 幅、高さ、カラー プレーンの数、ビット深度 (40 バイト) など、画像に関する追加情報が含まれます。

コードブール行列

から BMP イメージを生成する方法 次のコード スニペットは、その方法を示しています。外部ライブラリに依存せずにブール行列から BMP イメージを作成するには:

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);
ログイン後にコピー

このコードで概説されている手順に従うことで、ブール行列から単色の BMP イメージを正常に生成できます。アルゴリズムの結果を視覚化して出力します。

以上が外部ライブラリを使用せずに Pure C/C でブール行列から単色 BMP イメージを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート