我的函数用于将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);
}
答案 0 :(得分:1)
问题是您的输入文件格式不正确。它应该有足够的数据来填充charImage,但事实并非如此,这就是它失败的原因。另一种可能是您尝试在Windows上运行此代码,并且需要以二进制模式打开该文件。
具体(对于二进制部分)改变:
ifp.open(fname, ios::in);
为:
ifp.open(fname, ios::in | ios::binary);
顺便说一下,投射新操作员的结果通常是不合适的。在这里,它只是多余的,没有任何意义。
答案 1 :(得分:1)
使用reinterpret_cast<...>()
的任何内容对我来说都是可疑的,至少可以这么说。不过,这可能不是问题的根源。我个人猜测问题的根源是在Windows机器上运行代码而不是以二进制模式打开文件。尝试使用
std::ifstream in("filename", std::ios_base:::binary);
由于打开文件的代码不是问题的一部分,但这只是一个疯狂的猜测。