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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot和Vue的后台管理系统.zip
- 用于将 Power BI 嵌入到您的应用中的 JavaScript 库 查看文档网站和 Wiki 了解更多信息 .zip
- (源码)基于Arduino、Python和Web技术的太阳能监控数据管理系统.zip
- (源码)基于Arduino的CAN总线传感器与执行器通信系统.zip
- (源码)基于C++的智能电力系统通信协议实现.zip
- 用于 Java 的 JSON-RPC.zip
- 用 JavaScript 重新实现计算机科学.zip
- (源码)基于PythonOpenCVYOLOv5DeepSort的猕猴桃自动计数系统.zip
- 用 JavaScript 编写的贪吃蛇游戏 .zip
- (源码)基于ASP.NET Core的美术课程管理系统.zip