Bmp图像的数据格式及读取

Posted merlinzjl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

以上是关于Bmp图像的数据格式及读取的主要内容,如果未能解决你的问题,请参考以下文章

6.3.3 读取BMP图片信息

图像BMP格式介绍

北亚工程师详细解说BMP文件格式

数据恢复培训资料:BMP文件详解

JPG、bmp、swf、gif的区别

C++如何把位图保存到数组中