1.4.3    BMP图像
BMP(全称Bitmap)是Window操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
BMP图像文件的结构可以分为如下三个部分:文件头、调色板数据以及图像数据。其中文件头的长度为固定值54个字节;调色板数据对所有不超过256色的图像模式都需要进行设置,即使是单色图像模式也不例外,但是对于真彩色图像模式,其对应的BMP文件结构中却不存在相应调色板数据的设置信息;图像数据既可以采用一定的压缩算法进行处理,也可以不必对图像数据进行压缩处理,这不仅与图像文件的大小相关,而且也与对应的图像处理软件是否支持经过压缩处理的BMP图像文件相关。值得注意的是:BMP 图像文件结构设计得相当简单,这无疑有利于图像文件的处理速度,但是同时也使得 BMP图像文件格式具有一定的局限性,即一个BMP图像文件只能存储一幅图像。
BMP图像文件的文件头定义
Windows中将BMP图像文件的文件头分成两个数据结构,其中一个数据结构中包含 BMP文件的类型、大小和打印格式等信息,称为BITMAPFILEHEADER;另外一个数据结构中则包含BMP文件的尺寸定义等信息,称为BITMAPINFOHEADER。如果图像文件还需要调色板数据,则将其存放在文件头信息之后。BITMAPFILEHEADER数据结构在Windows.h中的定义为:
typedef struct tagBITMAPFILEHEADER   //类型定义, bmp文件头
{      //5个变量
WORD bftype;DWORD bfsize:WORD bfReservedl;WORD bgReserved2:DWORD bfoffBits:
}BITMAPFILEHEADER;
其中,bftype在图像文件存储空间中的数据(首)地址为0,数据类型为unsignedchar,内容为固定值"BM",用于标志文件格式,表示该图像文件为BMP文件。bfsize的数据地址为2,类型为unsignedlong,它以字节为单位,定义位图文件的大小。bfReservedl与bfReserved2的数据地址分别为6和8,数据类型则都为unsignedint,二者都是BMP文件的保留字,没有任何意义,其值必须为0。bfoffBits的数据地址为10,数据类型为unsignedlong,它以字节为单位,指示图像 数据在文件内的起始地址,即图像数据针对文件头的偏移量。
BITMAPINFOHEADER数据结构用于说明位图的大小,其定义为:
typedef struct tagBITMAPINFOHEADER
{
 DWORD biSize:DWORD biWldth;DWORD biHeight; WORD biPlanes:
 WORD biBitCount:DWORD biCOmpression: DWORD biSiZelmage: DWORD biXPelsPerMeter:
  DWORD biYPelsPerMeter:DWORD biClrUsed:      DWORD biClrImportant;
}BITMAPINFOHEADER;
其中,biSize的数据地址为14,数据类型为unsignedlong,它以字节为单位指定数据结构BITMAPINFOHEADER所占用的存储容量,固定值为40。 biWidth与biHeight的数据地址分别为18和22,数据类型都是unsignedlong,它们分别以像素为单位,给出该BMP文件所描述位图的宽度与高度。若biHeight的取值为正数, 则表明位图为bottom—up类型的DIB位图,而且位图原点为左下角。若biHeight的取值为负数,则表明位图为top—down类型的DIB位图,而且位图原点为左上角。(一般位图定义中,这两个字段的取值必须为正数)biPlanes的数据地址为26,类型为unsignedint,它代表目标设备的平面数必须为1。biBitCount的数据地址为28,类型为utlsignedint,它确定每个像素所需要的位数。当图像为单色时,该字段的取值为1;当图像为16色时,该字段的取值为4;当图像为256 色时,该字段的取值为8;当图像为真彩色时,该字段的取值为24。biCompression的数据地址为30,类型为unsignedlong,它代表bottom—up类型位图的压缩类型(注意:top—down类型位图不能进行压缩处理),其可能取值及其含义分别为: 若该字段的取值为BI—RGB,则表示文件内的图像数据没有经过压缩处理;若该字段的 取值为BI—RLE8,则表示所压缩的图像数据是256色,采用的压缩方法是RLE8;若该 段的取值为BI—RLE4,则表示所压缩的图像数据是16色,采用的压缩方法是RLE4;若该字段的取值为BI—BITFIELDS,则表明图像文件内的数据没有经过压缩处理,而且颜色表由分别表示每个像素点的红、绿、蓝三原色的双字组成。(BMP文件格式在处理单色或者真彩色图像时,不论图像数据多么庞大,都不对图像数据进行任何压缩处理。)biSizelmage的数据地址为34,类型为unsignedlong,它以字节为单位,给出该BMP 内图像数据占用的空间大小。若图像文件描述BI—RGB位图,则该字段的值必须设置为0。biXPelsPerMeter字段与biYPelsPerMeter字段的数据地址分别为38与42,类型都是 unsignedlong,它们分别以每米像素数为单位,给出位图目的设备水平以及垂直方向的分辨率;其中,应用程序可以根据biXPelsPerMeter字段的值,从源位图组中选择与当前设备特点最匹配的位图。biCkUsed的数据地址为46,类型为unsignedlong,给出位图实际使用的颜色表中的颜色变址数。如果该字段的取值为0,则代表本位图使用了biBitCount字段值所代表的最大颜色值,其中biBitCount字段的取值与biCompression所指定的压缩方法相关。例如: 如果图像为16色,而该字段的取值为10,则代表本位图共使用了12种颜色;如果该字段的取值非零,而且biBitCount字段的取值小于16,则该字段指定图像或者设备驱动器存取的实际颜色数。若biBitCount字段的取值大于或者等于16,则该字段指定使Windows系统调色板达到最优性能的颜色表大小。biClrImportant的数据地址为50,数据类型为unsignedlong,它给出位图显示过程中重要颜色的变址数。若该字段的取值为0,则表示所有使用的颜色都是重要颜色。
上一篇:VB基于图像处理的烟火药燃烧粒子测速
下一篇:上海婴幼儿产品市场分析及营销策略研究

基于Apriori算法的电影推荐

PHP+IOS的会议管理系统的设计+ER图

数据挖掘在电子商务中的应用

数据挖掘的主题标绘数据获取技术与实现

基于PageRank算法的网络数据分析

基于神经网络的验证码识别算法

基于网络的通用试题库系...

志愿者活动的调查问卷表

医院财务风险因素分析及管理措施【2367字】

10万元能开儿童乐园吗,我...

AT89C52单片机的超声波测距...

承德市事业单位档案管理...

中国学术生态细节考察《...

国内外图像分割技术研究现状

C#学校科研管理系统的设计

公寓空调设计任务书

神经外科重症监护病房患...