我试图将BMP图像文件读入内存但是我的代码一直在尽早发布。它读取的像素似乎是正确的。 eof会在每个文件的相同位置重复出现,但是文件之间没有可重复的常见模式。
1024 x 1024 image: file length = 3145782, bytes read = 6154.
256 x 256 image: file length = 196662, bytes read = 24243.
256 x 256 image2: file length = 196662, bytes read = 931.
我无法解决发生什么事情会欣赏一些意见。 下面是我的代码的缩短版本。为了便于阅读,我只删除了安全检查等内容。
std::ifstream file(filename, std::ios::in || std::ios::binary);
file.seekg(0, file.end);
int length = file.tellg();
file.seekg(0, file.beg);
std::cout << "file length = " << length << "\n";
//Read Header in and confirm this is actuall a bmp file.
file.read((char*)header, 54);
dataPos = *(int*)&(header[0x0A]);
imageSize = *(int*)&(header[0x22]);
width = *(int*)&(header[0x12]);
height = *(int*)&(header[0x16]);
std::cout << imageSize << "," << width << "," << height << "\n";
data = new unsigned char[imageSize];
file.read((char*)data, imageSize);
std::cout << "bytes read: " << file.gcount() << "\n";
file.close();
答案 0 :(得分:3)
std :: ifstream文件(filename,std :: ios :: in || std :: ios :: binary);
您正在使用逻辑||运算符代替按位| stream标志参数中的运算符。如果位掩码被证明是实现为整数或普通枚举类型,则不会发生错误,并且结果标志将转换为1(无论这种标志值在您的实现中是什么意思)。