0

pgm ファイル形式をメモリに読み込む関数に問題があります。

次のリンクhttp://www.cse.unr.edu/~bebis/CS308/Code/ReadImage.cppのソースを使用しました。同じディレクトリに他のものを見つけることができます。CS308のいくつかの指示; 興味があれば。

問題は ifp が失敗する ifstream です。そして、このコードがおそらく理由だと思います。しかし、私には問題ないようです。

どんなアイデアでも大歓迎です

charImage = (unsigned char *) new unsigned char [M*N];

 ifp.read( reinterpret_cast<char *>(charImage), (M*N)*sizeof(unsigned char));

 if (ifp.fail()) {
   cout << "Image " << fname << " has wrong size" << endl;
   exit(1);
 }
4

2 に答える 2

1

問題は、入力ファイルが正しくフォーマットされていないことです。charImageを埋めるのに十分なデータが必要ですが、そうではないため、失敗します。もう1つの可能性は、このコードをWindowsで実行しようとしていて、ファイルをバイナリモードで開く必要があることです。

具体的には(バイナリ部分の場合)変更:

 ifp.open(fname, ios::in);

に:

 ifp.open(fname, ios::in | ios::binary);

余談ですが、新しい演算子の結果をキャストすることは一般的に不適切です。ここでは、それは単に冗長であり、意味がありません。

于 2012-11-04T20:30:05.457 に答える
1

reinterpret_cast<...>()控えめに言っても、使用するものはすべて疑わしいように見えます。ただし、それはおそらく問題の根本ではありません。私の個人的な推測では、問題の根本原因は Windows マシンでコードを実行していて、ファイルをバイナリ モードで開いていないことです。使ってみて

std::ifstream in("filename", std::ios_base:::binary);

ただし、ファイルを開くコードは質問の一部ではないため、単なる推測です。

于 2012-11-04T20:31:36.597 に答える