📄 bmp_fileformat.htm
字号:
<tr>
<td WIDTH="27"><font size="+0">图象数据</font></td>
<td WIDTH="43"><font size="+0">根据BMP版本及调色板尺寸的不同而不同</font></td>
<td WIDTH="80"><font size="+0">Bitmap Data</font></td>
<td WIDTH="58"><font size="+0">xxx bytes</font></td>
<td WIDTH="287"><font size="+0">该域的大小取决于压缩方法及图像的尺寸和图像的位深度,它包含所有的位图数据字节,这些数据可能是彩色调色板的索引号,也可能是实际的RGB值,这将根据图像信息头中的位深度值来决定。</font></td>
</tr>
</table>
</center></div>
<br><br><br><br>
<blockquote>
<b><font color="#FF0000"><p align="center">构件详解</font></b></p>
</blockquote>
<font size="+0" color="#7F007F"><b>
<p>1. 位图文件头</b></font> </p>
<p><font size="+0">位图文件头包含有关于文件类型、文件大小、存放位置等信息,在Windows
3.0以上版本的位图文件中用BITMAPFILEHEADER结构来定义:</font> </p>
<p><font size="+0">typedef struct tagBITMAPFILEHEADER { /* bmfh */</font>
<blockquote>
<font size="+0">UINT bfType;</font><br>
<font size="+0">DWORD bfSize;</font> <br>
<font size="+0">UINT bfReserved1;</font> <br>
<font size="+0">UINT bfReserved2;</font> <br>
<font size="+0">DWORD bfOffBits;</font><br>
</blockquote>
<font size="+0">
} BITMAPFILEHEADER;</font> </p>
<p><font size="+0">其中:</font> <br>
</p>
<table BORDER="0" CELLSPACING="0" WIDTH="557">
<tr>
<td WIDTH="22%"><blockquote>
<font size="+0"><p>bfType</font></p>
</blockquote>
</td>
<td WIDTH="78%"><blockquote>
<font size="+0"><p>说明文件的类型.(该值必需是0x4D42,也就是字符'BM'。我们不需要判断OS/2的位图标识,这么做现在来看似乎已经没有什么意义了,而且如果要支持OS/2的位图,程序将变得很繁琐。所以,在此只建议你检察'BM'标识) </font></p>
</blockquote>
</td>
</tr>
<tr>
<td WIDTH="22%"><blockquote>
<font size="+0"><p>bfSize</font></p>
</blockquote>
</td>
<td WIDTH="78%"><blockquote>
<font size="+0"><p>说明文件的大小,用字节为单位</font></p>
</blockquote>
</td>
</tr>
<tr>
<td WIDTH="22%"><blockquote>
<font size="+0"><p>bfReserved1</font></p>
</blockquote>
</td>
<td WIDTH="78%"><blockquote>
<font size="+0"><p>保留,必须设置为0</font></p>
</blockquote>
</td>
</tr>
<tr>
<td WIDTH="22%"><blockquote>
<font size="+0"><p>bfReserved2</font></p>
</blockquote>
</td>
<td WIDTH="78%"><blockquote>
<font size="+0"><p>保留,必须设置为0</font></p>
</blockquote>
</td>
</tr>
<tr>
<td WIDTH="22%"><blockquote>
<font size="+0"><p>bfOffBits</font></p>
</blockquote>
</td>
<td WIDTH="78%"><blockquote>
<font size="+0"><p>说明从文件头开始到实际的图象数据之间的字节的偏移量。这个参数是非常有用的,因为位图信息头和调色板的长度会根据不同情况而变化,所以你可以用这个偏移值迅速的从文件中读取到位数据。</font></p>
</blockquote>
</td>
</tr>
</table>
<p><font size="+0" color="#7F007F"><b>2. 位图信息头</b></font> </p>
<p><font size="+0">位图信息用BITMAPINFO结构来定义,它由位图信息头(bitmap-information
header)和彩色表(color table)组成,前者用BITMAPINFOHEADER结构定义,后者用RGBQUAD结构定义。BITMAPINFO结构具有如下形式:</font>
</p>
<p><font size="+0">typedef struct tagBITMAPINFO { /* bmi */</font>
<blockquote>
<font size="+0">BITMAPINFOHEADER bmiHeader;</font><br>
<font size="+0">RGBQUAD bmiColors[1];</font><br>
</blockquote>
<font size="+0">
} BITMAPINFO;</font> </p>
<p><font size="+0">其中:</font> <br>
</p>
<table BORDER="0" CELLSPACING="0" WIDTH="557">
<tr>
<td WIDTH="22%"><blockquote>
<font size="+0"><p>bmiHeader</font></p>
</blockquote>
</td>
<td WIDTH="78%"><blockquote>
<font size="+0"><p>说明BITMAPINFOHEADER结构,其中包含了有关位图的尺寸及位格式等信息</font></p>
</blockquote>
</td>
</tr>
<tr>
<td WIDTH="22%"><blockquote>
<font size="+0"><p>bmiColors</font></p>
</blockquote>
</td>
<td WIDTH="78%"><blockquote>
<font size="+0"><p>说明彩色表RGBQUAD结构的阵列,其中包含索引图像的真实RGB值。</font></p>
</blockquote>
</td>
</tr>
</table>
<p><font size="+0">BITMAPINFOHEADER结构包含有位图文件的大小、压缩类型和颜色格式,其结构定义为:</font>
</p>
<p><font size="+0">typedef struct tagBITMAPINFOHEADER { /* bmih */</font>
<blockquote>
<font size="+0">DWORD biSize;</font> <br>
<font size="+0">LONG biWidth;</font> <br>
<font size="+0">LONG biHeight;</font> <br>
<font size="+0">WORD biPlanes;</font> <br>
<font size="+0">WORD biBitCount;</font> <br>
<font size="+0">DWORD biCompression;</font> <br>
<font size="+0">DWORD biSizeImage;</font> <br>
<font size="+0">LONG biXPelsPerMeter;</font> <br>
<font size="+0">LONG biYPelsPerMeter;</font> <br>
<font size="+0">DWORD biClrUsed;</font> <br>
<font size="+0">DWORD biClrImportant;</font><br>
</blockquote>
<font size="+0">
} BITMAPINFOHEADER;</font> </p>
<p><font size="+0">其中:</font> <br>
</p>
<table BORDER="0" CELLSPACING="0" WIDTH="565">
<tr>
<td WIDTH="147"><blockquote>
<font size="+0"><p>biSize</font></p>
</blockquote>
</td>
<td WIDTH="414"><blockquote>
<font size="+0"><p>说明BITMAPINFOHEADER结构所需要的字数。注:这个值并不一定是BITMAPINFOHEADER结构的尺寸,它也可能是sizeof(BITMAPV4HEADER)的值,或是sizeof(BITMAPV5HEADER)的值。这要根据该位图文件的格式版本来决定,不过,就现在的情况来看,绝大多数的BMP图像都是BITMAPINFOHEADER结构的(可能是后两者太新的缘故吧:-)。</font></p>
</blockquote>
</td>
</tr>
<tr>
<td WIDTH="147"><blockquote>
<font size="+0"><p>biWidth</font></p>
</blockquote>
</td>
<td WIDTH="414"><blockquote>
<font size="+0"><p>说明图象的宽度,以象素为单位</font></p>
</blockquote>
</td>
</tr>
<tr>
<td WIDTH="147"><blockquote>
<font size="+0"><p>biHeight</font></p>
</blockquote>
</td>
<td WIDTH="414"><blockquote>
<font size="+0"><p>说明图象的高度,以象素为单位。注:这个值除了用于描述图像的高度之外,它还有另一个用处,就是指明该图像是倒向的位图,还是正向的位图。如果该值是一个正数,说明图像是倒向的,如果该值是一个负数,则说明图像是正向的。大多数的BMP文件都是倒向的位图,也就是时,高度值是一个正数。(注:当高度值是一个负数时(正向图像),图像将不能被压缩(也就是说biCompression成员将不能是BI_RLE8或BI_RLE4)。</font></p>
</blockquote>
</td>
</tr>
<tr>
<td WIDTH="147"><blockquote>
<font size="+0"><p>biPlanes</font></p>
</blockquote>
</td>
<td WIDTH="414"><blockquote>
<font size="+0"><p>为目标设备说明位面数,其值将总是被设为1</font></p>
</blockquote>
</td>
</tr>
<tr>
<td WIDTH="147"><blockquote>
<font size="+0"><p>biBitCount</font></p>
</blockquote>
</td>
<td WIDTH="414"><blockquote>
<font size="+0"><p>说明比特数/象素,其值为1、4、8、16、24、或32</font></p>
</blockquote>
</td>
</tr>
<tr>
<td WIDTH="147"><blockquote>
<font size="+0"><p>biCompression</font></p>
</blockquote>
</td>
<td WIDTH="414"><font size="+0">说明图象数据压缩的类型。其值可以是下述值之一:</font>
<br>
<!--msthemelist--><table border="0" cellpadding="0" cellspacing="0" width="100%">
<!--msthemelist--><tr><td valign="baseline" width="42"><img src="urbbul1a.gif" width="20" height="20" hspace="11"></td><td valign="top" width="100%">BI_RGB:没有压缩; <br>
<!--msthemelist--></td></tr>
<!--msthemelist--><tr><td valign="baseline" width="42"><img src="urbbul1a.gif" width="20" height="20" hspace="11"></td><td valign="top" width="100%">BI_RLE8:每个象素8比特的RLE压缩编码,压缩格式由2字节组成(重复象素计数和颜色索引);
<br>
<!--msthemelist--></td></tr>
<!--msthemelist--><tr><td valign="baseline" width="42"><img src="urbbul1a.gif" width="20" height="20" hspace="11"></td><td valign="top" width="100%">BI_RLE4:每个象素4比特的RLE压缩编码,压缩格式由2字节组成 <br>
<!--msthemelist--></td></tr>
<!--msthemelist--><tr><td valign="baseline" width="42"><img src="urbbul1a.gif" width="20" height="20" hspace="11"></td><td valign="top" width="100%">BI_BITFIELDS:每个象素的比特由指定的掩码决定。<br>
<!--msthemelist--></td></tr>
<!--msthemelist--></table>
</td>
</tr>
<tr>
<td WIDTH="147"><blockquote>
<font size="+0"><p>biSizeImage</font></p>
</blockquote>
</td>
<td WIDTH="414"><font size="+0">说明图象的大小,以字节为单位。当用BI_RGB格式时,可设置为0</font></td>
</tr>
<tr>
<td WIDTH="147"><blockquote>
<font size="+0"><p>biXPelsPerMeter</font></p>
</blockquote>
</td>
<td WIDTH="414"><font size="+0">说明水平分辨率,用象素/米表示</font></td>
</tr>
<tr>
<td WIDTH="147"><blockquote>
<font size="+0"><p>biYPelsPerMeter</font></p>
</blockquote>
</td>
<td WIDTH="414"><font size="+0">说明垂直分辨率,用象素/米表示</font></td>
</tr>
<tr>
<td WIDTH="147"><blockquote>
<font size="+0"><p>biClrUsed</font></p>
</blockquote>
</td>
<td WIDTH="414"><font size="+0">说明位图实际使用的彩色表中的颜色索引数(设为0的话,则说明使用所有调色板项)</font></td>
</tr>
<tr>
<td WIDTH="147"><blockquote>
<font size="+0"><p>biClrImportant</font></p>
</blockquote>
</td>
<td WIDTH="414"><blockquote>
<font size="+0"><p>说明对图象显示有重要影响的颜色索引的数目,如果是0,表示都重要。</font></p>
</blockquote>
</td>
</tr>
</table>
<p><font size="+0">现就BITMAPINFOHEADER结构作如下说明:</font> </p>
<p><b><font size="+0">(1) 彩色表的定位</font></b> </p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -