0

我对用于将 pgm 文件格式读取到内存的函数有疑问。

我使用了以下链接http://www.cse.unr.edu/~bebis/CS308/Code/ReadImage.cpp中的资源。您可以在同一目录中找到其他人;以及 CS308 中的一些说明;如果你有兴趣。

问题是 ifstream ifp 失败;我认为这段代码可能是原因;但我觉得很好。

任何想法将不胜感激

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,但它没有,这就是它失败的原因。另一种可能性是您试图在 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 回答