⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bmp文件格式分析.htm

📁 BMP格式分析的好资料!对初学者有很大的帮助
💻 HTM
📖 第 1 页 / 共 3 页
字号:
    <TD width=43><FONT size=+0>根据BMP版本的不同而不同</FONT></TD>
    <TD width=80><FONT size=+0>Palette</FONT></TD>
    <TD width=58><FONT size=+0>N * 4 byte</FONT></TD>
    <TD width=287><FONT size=+0>调色板规范。对于调色板中的每个表项,这4个字节用下述方法来描述RGB的值:</FONT> <!--msthemelist-->
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0><!--msthemelist-->
        <TBODY>
        <TR>
          <TD vAlign=baseline width=42><IMG height=20 hspace=11 
            src="BMP文件格式分析.files/urbbul1a.gif" width=20></TD>
          <TD vAlign=top width="100%">1字节用于蓝色分量<!--msthemelist--></TD></TR><!--msthemelist-->
        <TR>
          <TD vAlign=baseline width=42><IMG height=20 hspace=11 
            src="BMP文件格式分析.files/urbbul1a.gif" width=20></TD>
          <TD vAlign=top width="100%">1字节用于绿色分量<!--msthemelist--></TD></TR><!--msthemelist-->
        <TR>
          <TD vAlign=baseline width=42><IMG height=20 hspace=11 
            src="BMP文件格式分析.files/urbbul1a.gif" width=20></TD>
          <TD vAlign=top width="100%">1字节用于红色分量<!--msthemelist--></TD></TR><!--msthemelist-->
        <TR>
          <TD vAlign=baseline width=42><IMG height=20 hspace=11 
            src="BMP文件格式分析.files/urbbul1a.gif" width=20></TD>
          <TD vAlign=top width="100%">1字节用于填充符(设置为0)<!--msthemelist--></TD></TR><!--msthemelist--></TBODY></TABLE></TD></TR>
  <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></TBODY></TABLE></CENTER></DIV><BR><BR><BR><BR>
<BLOCKQUOTE><B><FONT color=#ff0000>
  <P align=center>构件详解</FONT></B></P></BLOCKQUOTE><FONT color=#7f007f size=+0><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>
<P><FONT size=+0>其中:</FONT> <BR>&nbsp; </P>
<TABLE cellSpacing=0 width=557 border=0>
  <TBODY>
  <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'标识)&nbsp;</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></TBODY></TABLE>
<P><FONT color=#7f007f size=+0><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>
<P><FONT size=+0>其中:</FONT> <BR>&nbsp; </P>
<TABLE cellSpacing=0 width=557 border=0>
  <TBODY>
  <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></TBODY></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>
<P><FONT size=+0>其中:</FONT> <BR>&nbsp; </P>
<TABLE cellSpacing=0 width=565 border=0>
  <TBODY>
  <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 cellSpacing=0 cellPadding=0 width="100%" border=0><!--msthemelist-->
        <TBODY>
        <TR>
          <TD vAlign=baseline width=42><IMG height=20 hspace=11 
            src="BMP文件格式分析.files/urbbul1a.gif" width=20></TD>
          <TD vAlign=top width="100%">BI_RGB:没有压缩; 
<BR><!--msthemelist--></TD></TR><!--msthemelist-->
        <TR>
          <TD vAlign=baseline width=42><IMG height=20 hspace=11 
            src="BMP文件格式分析.files/urbbul1a.gif" width=20></TD>
          <TD vAlign=top 
            width="100%">BI_RLE8:每个象素8比特的RLE压缩编码,压缩格式由2字节组成(重复象素计数和颜色索引); <BR><!--msthemelist--></TD></TR><!--msthemelist-->
        <TR>
          <TD vAlign=baseline width=42><IMG height=20 hspace=11 
            src="BMP文件格式分析.files/urbbul1a.gif" width=20></TD>
          <TD vAlign=top width="100%">BI_RLE4:每个象素4比特的RLE压缩编码,压缩格式由2字节组成 <BR><!--msthemelist--></TD></TR><!--msthemelist-->
        <TR>
          <TD vAlign=baseline width=42><IMG height=20 hspace=11 
            src="BMP文件格式分析.files/urbbul1a.gif" width=20></TD>
          <TD vAlign=top width="100%">BI_BITFIELDS:每个象素的比特由指定的掩码决定。<BR><!--msthemelist--></TD></TR><!--msthemelist--></TBODY></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></TBODY></TABLE>
<P><FONT size=+0>现就BITMAPINFOHEADER结构作如下说明:</FONT> </P>
<P><B><FONT size=+0>(1) 彩色表的定位</FONT></B> </P>
<P><FONT size=+0>应用程序可使用存储在biSize成员中的信息来查找在BITMAPINFO结构中的彩色表,如下所示:</FONT> </P>
<P><FONT size=+0>pColor = ((LPSTR) pBitmapInfo + (WORD) 
(pBitmapInfo-&gt;bmiHeader.biSize))</FONT> </P>
<P><B><FONT size=+0>(2) biBitCount</FONT></B> </P>
<P><FONT size=+0><B>biBitCount=1 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -