BMP的文件格式typedef struct tagBITMAPFILEHEADER //位图文件头 { UINT bfType;//类型 DWORD bfSize; //大小 UINT bfReserved1;//保留,为0; UINT bfReserved2;//保留,为0; DWORD bfOffBits;//偏移量 } BITMAPFILEHEADER; ### BMP文件格式详解 BMP(Bitmap)是一种用于存储位图图像的标准文件格式,由Microsoft在Windows操作系统中提出。BMP格式的特点在于它能够提供无损压缩,这意味着图像数据在保存过程中不会发生任何质量损失。这使得BMP格式非常适合于需要高质量图像的应用场景。 #### 1. BMP文件结构概述 一个完整的BMP文件由两大部分组成:文件头部(File Header)与图像数据部分。其中,文件头部包含了用于描述图像基本信息的数据结构。 #### 2. 文件头部(File Header) 文件头部主要用来存储关于文件的基本属性,包括文件类型、文件大小、保留字段以及位图数据的偏移量等信息。具体定义如下: ```c typedef struct tagBITMAPFILEHEADER { UINT bfType; // 文件类型,通常为0x4D42(BM) DWORD bfSize; // 文件大小,单位为字节 UINT bfReserved1; // 保留字段,必须为0 UINT bfReserved2; // 保留字段,必须为0 DWORD bfOffBits; // 位图数据起始位置相对于文件开头的偏移量 } BITMAPFILEHEADER; ``` - **bfType**:这是一个16位的字段,用于标识文件类型,对于BMP文件来说,该字段的值通常是`0x4D42`(即"BM"),表明这是一个BMP文件。 - **bfSize**:这是一个32位的字段,表示整个BMP文件的大小,包括所有头部信息及图像数据的总大小。 - **bfReserved1** 和 **bfReserved2**:这两个字段都是保留字段,应设置为0。 - **bfOffBits**:这是一个32位的字段,表示位图数据的起始位置距离文件开头的偏移量。这是非常重要的信息,因为根据这个偏移量,程序可以定位到图像数据的开始位置。 #### 3. 图像信息头部(Info Header) 除了文件头部之外,BMP文件还包括一个图像信息头部,该头部提供了更多关于图像的细节信息,例如宽度、高度、颜色深度等。这部分信息对于正确渲染图像至关重要。 ```c typedef struct tagBITMAPINFOHEADER { DWORD biSize; // 此BITMAPINFOHEADER结构的大小 LONG biWidth; // 图像宽度,以像素为单位 LONG biHeight; // 图像高度,以像素为单位 WORD biPlanes; // 图像平面数量,一般为1 WORD biBitCount; // 每个像素的颜色位数(1, 4, 8, 16, 24, 32) DWORD biCompression; // 压缩方法 DWORD biSizeImage; // 压缩图像的实际大小 LONG biXPelsPerMeter; // 水平分辨率,每米的像素数 LONG biYPelsPerMeter; // 垂直分辨率,每米的像素数 DWORD biClrUsed; // 实际使用的颜色数 DWORD biClrImportant; // 对图像显示有重要影响的颜色数 } BITMAPINFOHEADER; ``` - **biSize**:此字段指明了`BITMAPINFOHEADER`结构体的大小,通常为40字节。 - **biWidth** 和 **biHeight**:分别表示图像的宽度和高度,单位是像素。 - **biPlanes**:通常设置为1,表示图像只包含一个色彩平面。 - **biBitCount**:表示每个像素的颜色位数,常见的值包括1(单色)、4、8、16、24和32位。 - **biCompression**:指定所采用的压缩方法,常用值包括: - `BI_RGB`:不压缩。 - `BI_RLE8` 和 `BI_RLE4`:分别表示8位或4位的RLE压缩。 - `BI_BITFIELDS`:用于16位或32位图像,每个像素的位被解释为一组掩码值。 - **biSizeImage**:表示压缩后的图像数据大小,如果未压缩则为0。 - **biXPelsPerMeter** 和 **biYPelsPerMeter**:分别表示图像的水平和垂直分辨率,单位是每米像素数。 - **biClrUsed** 和 **biClrImportant**:分别表示实际使用的颜色数以及对图像显示有重要影响的颜色数。 #### 4. 颜色表(Color Palette) 对于使用了调色板的BMP图像(如1位、4位或8位图像),还需要一个颜色表来定义每个索引值对应的RGB颜色值。 ```c typedef struct tagRGBQUAD { BYTE rgbBlue; // 蓝色分量 BYTE rgbGreen; // 绿色分量 BYTE rgbRed; // 红色分量 BYTE rgbReserved; // 保留字段,应设为0 } RGBQUAD; ``` #### 5. 图像数据 在文件头部和信息头部之后,就是实际的图像数据部分。这部分数据按照指定的颜色位数和编码方式存储图像信息。 ### 总结 通过以上分析,我们可以看到BMP文件格式的结构是非常清晰和有序的。文件头部和信息头部提供了必要的元数据,而图像数据部分则包含具体的像素信息。这种设计使得BMP文件易于解析,并且兼容性良好。虽然BMP格式由于其较大的文件大小而在网络传输方面不如JPEG等格式流行,但在一些需要高质量图像的应用场景下,BMP仍然是一个很好的选择。
{
UINT bfType;//类型
DWORD bfSize; //大小
UINT bfReserved1;//保留,为0;
UINT bfReserved2;//保留,为0;
DWORD bfOffBits;//偏移量
} BITMAPFILEHEADER;
ZJVEGPKQU17KJHZ5 7GQPFZ60H2RUTRPH
LXUQ0WYCHZRJNTG9 K451TKTW88XE6VHY
typedef struct tagBITMAPINFO //位图信息
{
BITMAPINFOHEADER bmiHeader; //位图信息头
RGBQUAD bmiColors[1];//彩色表(4位,8位图才带RGBQUAD)
} BITMAPINFO;
typedef struct tagBITMAPINFOHEADER //位图信息头
{
DWORD biSize; //说明BITMAPINFOHEADER结构所需要的字数
LONG biWidth; //说明图象的宽度,以象素为单位
LONG biHeight; //说明图象的高度,以象素为单位
WORD biPlanes;//为目标设备说明位面数,其值将总是被设为1
WORD biBitCount;//说明比特数/象素,其值为1、4、8、16、24、或32
DWORD biCompression;//说明图象数据压缩的类型。BI_RGB:BI_RLE8:BI_RLE4:BI_BITFIELDS:
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【多智能体控制】基于matlab自适应领导者与追随者动态规划仿真【含Matlab源码 8003期】.mp4
- 压合半自动组装线体工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 移动式液压伸缩提升机工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- sgg慕尚花坊项目代码
- 折弯激光焊接设备工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 已生产的插针机工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 纸盒成型机工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 智能仓库穿梭车工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 纸盒六面包膜机覆膜机工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 自动Mylar贴合机工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 自动裁切机工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 自动调节双轴变位机单边基座工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 自动裁布机工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 自动焊管机工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 自制点胶系统工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 自动覆膜设备工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip