#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef long LONG;
void main(){
fstream file;
int i,j;
char RGBQUAD[4][256], PIXEL[512][512],temp[512][512];
char fileName[32]="lena.bmp";
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
file.open(fileName, ios::in|ios::binary);
file.read((char*)&bfType, sizeof(WORD));
file.read((char*)&bfSize, sizeof(DWORD));
file.read((char*)&bfReserved1, sizeof(WORD));
file.read((char*)&bfReserved2, sizeof(WORD));
file.read((char*)&bfOffBits, sizeof(DWORD));
file.read((char*)&biSize, sizeof(DWORD));
file.read((char*)&biWidth, sizeof(LONG));
file.read((char*)&biHeight, sizeof(LONG));
file.read((char*)&biPlanes, sizeof(WORD));
file.read((char*)&biBitCount, sizeof(WORD));
file.read((char*)&biCompression, sizeof(DWORD));
file.read((char*)&biSizeImage, sizeof(DWORD));
file.read((char*)&biXPelsPerMeter, sizeof(LONG));
file.read((char*)&biYPelsPerMeter, sizeof(LONG));
file.read((char*)&biClrUsed, sizeof(DWORD));
file.read((char*)&biClrImportant, sizeof(DWORD));
file.read(RGBQUAD[0], sizeof(RGBQUAD));
file.read(PIXEL[0], sizeof(PIXEL));
file.close();
//顯示檔案資訊
cout << "FILE_HEADER\n"
<< "bfType=\t\t" << bfType << '\n'
<< "bfSize=\t\t" << bfSize << '\n'
<< "bfReserved1=\t" << bfReserved1 << '\n'
<< "bfReserved2=\t" << bfReserved2 << '\n'
<< "bfOffBits=\t" << bfOffBits << "\n\n"
<< "INFO_HEADER\n"
<< "biSize=\t\t" << biSize << '\n'
<< "biWidth=\t" << biWidth << '\n'
<< "biHeight=\t" << biHeight << '\n'
<< "biPlanes=\t" << biPlanes << '\n'
<< "biBitCount=\t" << biBitCount << '\n'
<< "biCompression=\t" << biCompression << '\n'
<< "biSizeImage=\t" << biSizeImage << '\n'
<< "biXPelsPerMeter=" << biXPelsPerMeter << '\n'
<< "biYPelsPerMeter=" << biYPelsPerMeter << '\n'
<< "biClrUsed=\t" << biClrUsed << '\n'
<< "biClrImportant=\t" << biClrImportant << "\n\n";