1

ここで、最も簡単な方法であるBMPを分析する方法を説明する必要があります。これはより大きなプログラムのほんの一部であり、私はこれを行う時間があまりありません。基本的には、黒のピクセルと白のピクセルの「座標」だけが必要です。私はいくつかの調査を行い、次のサイトが興味深いことを発見しました。 サイトIサイトII
2番目のサイトは洗練されていますが、そこに投稿されたコードは理解できます。最初のものははるかに複雑なようです(そしてWindowsでのみ動作しますが、私はそれを避けようとします)、2番目のものはBorland固有のヘッダーであるvcl.hを使用しています(私はVisualStudioを使用しています)。ヘルプ、提案、またはそのトピックをカバーするサイトへのリンクをいただければ幸いです。

PS:私が質問した方法が気に入らない場合は、これが私の最初の投稿です。追加情報が必要な場合はお問い合わせください。

これがあなたの助けに感謝するコードです。

// read_and_send_bmp.cpp
#include <iostream><\code>
#include <string>
#include "bitmap_image.hpp"

using std::string;
using std::cin;
using std::cout;
using std::endl;

char * check(string name_of_bitmap);

int main()
{
    string name_of_bitmap;
    cout << "Name of file: ";
    cin >> name_of_bitmap;
    char * toPrint = check(name_of_bitmap);
    cout << endl << "this is the value of 'toPrint': "<< toPrint;
    /* send
    ...
    */
    system("PAUSE");
    return 0;
}

char * check(string name_of_bitmap)
{
    bitmap_image myBitMapImage(name_of_bitmap);
    int size = myBitMapImage.pixel_count();
    char * toReturn = new char[size+1];
        for(int i = 0; i < myBitMapImage.pixel_count(); i++)
        toReturn[i] = 'f';
     int h = 1;
     for(int j = 0, jlen = myBitMapImage.height(); j < jlen; j++)
    {
        for(int i = 0, ilen = myBitMapImage.width(); i < ilen; i++, h++)
            {
            if(myBitMapImage.red_channel(i, j) == 0 && myBitMapImage.green_channel(i, j) == 0 && myBitMapImage.blue_channel(i, j) == 0)
            {
            toReturn[(j)*myBitMapImage.width()+i] = 'b';
            cout << "pixel nr." << (j)*myBitMapImage.width()+i << " = b" << endl;
            }
            else
            {
            toReturn[(j)*myBitMapImage.width()+i] = 'w';
            cout << "pixel nr." << (j)*myBitMapImage.width()+i << " = w" << endl;
            }
        }
    }
    toReturn[size]='\0';
    return toReturn;
}
4

2 に答える 2

2

これを見てください:http ://www.kalytta.com/bitmap.h 。

CBitmap :: Loadを使用してファイルをロードし、次にCBitmap::GetBitsを使用してサイズ4x幅x高さのRGBAバッファーへのポインターを取得します。

白いピクセルはR=G = B = 255で、黒いピクセルはR = G = B=0です。

于 2013-01-02T14:40:45.923 に答える
0

BMP(ビットマップ)を分析する最も簡単な方法であるIMHOは、チャネルごとに1つの次元(たとえば、赤、青、緑、アルファなど)を持つ多次元マトリックスに変換することです。

行列の中に入ると、行列代数を使用して変換を適用できます。

BMPを行列に変換するためのライブラリがあります。Webで「libraryc++bmp」を検索します。

于 2013-01-02T15:47:42.453 に答える