2017-08-07 10 views
1

ファイルを部分的にしか読み込まないread関数に問題があります。 たとえば、私の配列のサイズが4 * 4の場合、私の関数はピクセルを0からC++でfileioを使用して2D配列を読み取る

ピクセルだけ読み込みます[0(ピクセル[0] [1]、ピクセル[0] [2]、ピクセル[0] [3] 、pixels [0] [4])

しかし、16ピクセルすべてを読みたいと思っています。

私のクラスのフィールドは次のとおりです。ここで

unsigned int cols; 
unsigned int rows; 
uint8_t** pixels; 

は私のロード機能である:

int Image::load(const char* filename) { 
    //int count=0; 
    ifstream inFile(filename); 
    if (!inFile) { 
     cerr<<"unable to open file"; 
     return 1; 
    } 
    inFile>>cols; 
    inFile>>rows; 
    cout<<cols; 
    cout<<rows; 

    pixels=new uint8_t*[cols]; 
    for(int i=0;i<cols;i++){ 
     pixels[i]=new uint8_t[rows]; 
    } 
    for(int i=0;i<cols;i++){ 
     for(int j=0;j<rows;j++){ 
      inFile>>pixels[i][j]; 
      cout<<(uint8_t)(pixels[i][j]); 
     } 
    } 
    //cout<<count; 
    inFile.close(); 
    return 0; 
} 

私はcolsの、行、およびピクセルを持って読んでいたファイル。

4 4 
0 0 16 
0 1 16 
0 2 16 
0 3 16 
1 0 16 
1 1 16 
1 2 16 
1 3 16 
2 0 16 
2 1 16 
2 2 16 
2 3 16 
3 0 16 
3 1 16 
3 2 16 
3 3 16 
+1

再生可能なコード例とファイル例を示してください。役立つはずです。 – Fabien

+2

'std :: vector >'はなぜですか? – genpfault

+0

エラーチェックを追加する必要があります。また、デバッガでコードを突き詰めるだけで、何が間違っているのかを素早く伝える必要があります。 – hyde

答えて

0

ファイルごとに3つの数字があります。しかし、1つの数字だけを読み、それがピクセル値であると仮定します。

内部ループの各ピクセル(ピクセルの列、ピクセルの行、ピクセル値、私は推測する)に対して3つの値を読み取ることを修正しました。

+0

ファイルに列番号、行番号、およびピクセル値がありません。しかし、ピクセルごとに3つの値を読み取る必要があることは間違いありません。値がすべて正しく並べられれば、3つの最初の2つの値は破棄できますが、代わりにそれを使用する方がよい場合があります。 –

+0

@ JerryJeremiahピクセル値が順番に並んでいることが保証されていれば、ファイル内にピクセル値がまったくないことはまったくありません。とにかく、答えの文言を明確にしました。 – hyde

関連する問題