C++ 读取.bmp文件c++;,错误的价值观?

C++ 读取.bmp文件c++;,错误的价值观?,c++,bmp,C++,Bmp,下面是我从bmp文件读取的代码(使用windows.h)。它从BITMAPFILEHEADER读取正确的值,但从BitMapInfo Header读取的所有值都是40(十六进制为28)。 怎么了 ifstream file("d3.bmp",ios::binary); BITMAPFILEHEADER fheader; BITMAPINFOHEADER aImg; ofstream fileOut("newfile5.txt",ios::app); file.read((char*)&

下面是我从bmp文件读取的代码(使用windows.h)。它从BITMAPFILEHEADER读取正确的值,但从BitMapInfo Header读取的所有值都是40(十六进制为28)。 怎么了

ifstream file("d3.bmp",ios::binary);
BITMAPFILEHEADER fheader;
BITMAPINFOHEADER aImg;

ofstream fileOut("newfile5.txt",ios::app);

file.read((char*)&fheader.bfType, sizeof(WORD));
fileOut<<std::hex<<fheader.bfType<<"\n";
file.read((char*)&fheader.bfSize, sizeof(DWORD));
fileOut<<fheader.bfSize<<"\n";
file.read((char*)&fheader.bfReserved1, sizeof(WORD));
fileOut<<fheader.bfReserved1<<"\n";
file.read((char*)&fheader.bfReserved2, sizeof(WORD));
fileOut<<fheader.bfReserved2<<"\n";
file.read((char*)&fheader.bfOffBits, sizeof(DWORD));
fileOut<<fheader.bfOffBits<<"\n";


file.read((char*)&aImg.biSize,sizeof(DWORD));
fileOut<<aImg.biSize<<"\n";
file.read((char*)&aImg.biWidth, sizeof(LONG));
fileOut<<aImg.biSize<<"\n";
file.read((char*)&aImg.biHeight, sizeof(LONG));
fileOut<<aImg.biSize<<"\n";
file.read((char*)&aImg.biPlanes, sizeof(WORD));
fileOut<<aImg.biSize<<"\n";
file.read((char*)&aImg.biBitCount, sizeof(WORD));
fileOut<<aImg.biSize<<"\n";
file.read((char*)&aImg.biCompression, sizeof(DWORD));
fileOut<<aImg.biSize<<"\n";
file.read((char*)&aImg.biSizeImage, sizeof(DWORD));
fileOut<<aImg.biSize<<"\n";
file.read((char*)&aImg.biXPelsPerMeter, sizeof(LONG));
fileOut<<aImg.biSize<<"\n";
file.read((char*)&aImg.biYPelsPerMeter, sizeof(LONG));
fileOut<<aImg.biSize<<"\n";
file.read((char*)&aImg.biClrUsed, sizeof(DWORD));
fileOut<<aImg.biSize<<"\n";
file.read((char*)&aImg.biClrImportant, sizeof(DWORD));
fileOut<<aImg.biSize<<"\n";
ifstream文件(“d3.bmp”,ios::binary); BITMAPFILEHEADER fheader; BitMapInfo标题aImg; 流文件输出(“newfile5.txt”,ios::app); read((char*)&fheader.bfType,sizeof(WORD));
fileOut我打赌读取的值是正确的,只是您总是一次又一次地输出相同的字节:

file.read((char*)&aImg.biSize,sizeof(DWORD));
fileOut<<aImg.biSize<<"\n"; //ok, biSize
file.read((char*)&aImg.biWidth, sizeof(LONG));
fileOut<<aImg.biSize<<"\n"; //wait, biSize again?
file.read((char*)&aImg.biHeight, sizeof(LONG));
fileOut<<aImg.biSize<<"\n"; //well somehow I'm getting suspicious
file.read((char*)&aImg.biPlanes, sizeof(WORD));
fileOut<<aImg.biSize<<"\n"; //...
file.read((char*)&aImg.biBitCount, sizeof(WORD));
...
file.read((char*)&aImg.biSize,sizeof(DWORD));

fileOut我打赌读取的值是正确的,只是您总是一次又一次地输出相同的字节:

file.read((char*)&aImg.biSize,sizeof(DWORD));
fileOut<<aImg.biSize<<"\n"; //ok, biSize
file.read((char*)&aImg.biWidth, sizeof(LONG));
fileOut<<aImg.biSize<<"\n"; //wait, biSize again?
file.read((char*)&aImg.biHeight, sizeof(LONG));
fileOut<<aImg.biSize<<"\n"; //well somehow I'm getting suspicious
file.read((char*)&aImg.biPlanes, sizeof(WORD));
fileOut<<aImg.biSize<<"\n"; //...
file.read((char*)&aImg.biBitCount, sizeof(WORD));
...
file.read((char*)&aImg.biSize,sizeof(DWORD));

fileOutJust一些建议:不要使用sizeof(LONG)使用sizeof(&aImg.biXPelsPerMeter)即不要硬编码大小,让编译器为您工作:)只是一些建议:不要使用sizeof(LONG)使用sizeof(&aImg.biXPelsPerMeter)即不要硬编码大小,让编译器为您工作:)