0

.pgm バージョンの p5 ファイルを読み込もうとしています。ヘッダーはプレーン テキストで、実際のデータはプレーン バイトで格納されます。ヘッダーは任意の長さにすることができます。プレーンテキストを1行ずつ読み取った後、バイトごとに読み取りを開始するにはどうすればよいですか?

int main()
{
//Declare
    int rows = 0, cols = 0, maxVal = 0;
    ifstream infile("image.pgm");
    string inputLine = "";
    string trash = "";

    //First line "P5"
    getline(infile,inputLine);

    //ignore lines with comments
    getline(infile,trash);
    while (trash[0] == '#')
    {
        getline(infile,trash);
    }
    //get the rows and cols
    istringstream iss(trash);
    getline(iss, inputLine, ' ');
    rows = atoi(inputLine.c_str());
    getline(iss, inputLine, ' ');
    cols = atoi(inputLine.c_str());
    //get the last plain text line maxval
    getline(infile,inputLine);
    maxVal = atoi(inputLine.c_str());

    //Now start reading individual bites



    Matrix<int, rows, cols> m;

    //now comes the data
    for(i = 0; i<rows; i++)
    {
        for(j = 0; j < cols; j++)
        {
            //store data into matrix
        }
    }




    system("Pause");
    return 0;
}
4

1 に答える 1

0

ifstream::readを使用して、バイナリ データのブロックを読み取り、それをバッファーにコピーします。ヘッダーの画像サイズからデータのサイズがわかります。

マトリックス オブジェクトにアドレスを取得するメソッドがある場合は、それを直接コピーするか、一時バッファーに読み取ってから、それをマトリックスにコピーできます。一度に 1 バイトを読み取ると、非常に遅くなる可能性があります。

于 2015-10-06T02:20:54.633 に答える