Bmp图像的数据格式及读取

数据格式参考:https://www.cnblogs.com/l2rf/p/5643352.html

一、BMP文件读取

//BMP文件的数据按照从文件头开始的先后顺序分为四个部分:
//BITMAPFILEHEADER,位图文件头(bmp file header): 提供文件的格式、大小等信息
//BITMAPINFOHEADER,位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息
//RGBQUAD,调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表
//位图数据(bitmap data):图像数据区
fstream fs;
string path = "tmp.bmp";
fs.open(path, ios::in | ios::binary);
if (!fs.is_open())
{
// //DWORD error = GetLastError();
// //TCHAR msgbuf[100];
// //memset(msgbuf, 0, 100);
// //FormatMessage(
// // FORMAT_MESSAGE_ALLOCATE_BUFFER |
// // FORMAT_MESSAGE_FROM_SYSTEM |
// // FORMAT_MESSAGE_IGNORE_INSERTS,
// // NULL,
// // error,
// // MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
// // (LPTSTR)msgbuf,
// // 0, NULL);
return -1;
}

BITMAPFILEHEADER bmpFileHeader = { 0 };
//读取header
fs.read((char *)&bmpFileHeader, sizeof(BITMAPFILEHEADER));//sizeof(BITMAPFILEHEADER)大小为14,而不是16,如果是16需要注意对齐问题
if (bmpFileHeader.bfType != 0x4D42) //文件标识符,必须为"BM",小端模式,即0x4d42 才是Windows位图文件
{
return -1;
};

BITMAPINFOHEADER bmpInfoHeader = { 0 };
fs.read((char *)&bmpInfoHeader, sizeof(BITMAPINFOHEADER));

fs.close();

return 0;

猜你喜欢

转载自www.cnblogs.com/merlinzjl/p/11717405.html