预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

1.BMP图像的结构与显示BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,所以称为位图(bitmap)文件,因其文件扩展名为BMP,故称为BMP文件格式,简称BMP文件。BMP图像文件被分成4个部分:位图文件头(BitmapFileHeader)、位图信息头(BitmapInfoHeader)、颜色表(ColorMap)和位图数据(即图像数据,DataBits或DataBody)。为了实现BMP图像的各种处理(如显示,平滑,锐化等),我们必须清楚BMP图像文件的组成,下面将详细介绍一下BMP图像的文件格式。1.1BMP图像的文件格式BMP图像文件由文件头、文件信息头、调色板和图像数据组成。(1)文件头文件头是一个结构,长度为14个字节,各组成部分如下:WORDbfType//2个字节表示文件类型,其值为“BMDWORDbfSize//4个字节表示文件的大小。WORDbfReserved1//2个字节保留,其值为0。WORDbfReserved1//2个字节保留,其值为0。DWORDbfOffBits//4个字节表示第一个像素的偏移量由文件头可以获得该文件型、小及第一个像素的偏移地址。(2)文件信息头文件信息头也是一个结构体,长度为40个字节,各组成部分如下:DWORLDbiSize//4个字节存放文件信息头的长度,其值为40。LONGbiWidth//4个字节存放位图的宽度。LONGbiHeight//4个字节存放位图的高度。WORDbiplanes//2个字节存放平面的数目,其值为1。WORDbiBitcount//两个字节存放每个像素所占的位数,其值可以是1,4,8,24等。DWORDbiCompression//4个字节指定位图是否压缩,其值可以是常值BI_RGB,BI_RLE8,BI_RLE4等。如果没有压缩则为BI_RGB(即0)。DWORDbiSizeImage//4个字节表示位图的实际大小。LONGbiXPelsPerMeter//4个字节指定目标设备的水平分辨率,通常不用将其设为0。LONGbiYPelsPerMeter//4个字节指定目标设备的垂直分辨率,通常不用将其设为0。DWORDbiClrUsed//4个字节指定图像实际用到的颜色数,若使用所有颜色则值为0。DWORDbiClrImportant//4个字节指定图像中重要的颜色数,若全部重要则值为0。由文件信息头可以获得有关位图的详细信息,位图的实际大小并不等于biWidth和biHeight的乘积。因为在保存位图时要求每一行的字数必须是4的整数倍,如果不是,则需要补齐。(3)颜色表颜色表实际上是一个RGBQUAD结构的数组,数组的长度由biClrUsed指定(如果该值为零,则由biBitCount指定,即2的biBitCount次幂个元素)。RGBQUAD结构是一个结构体类型,占4个字节,其定义如下:BYTErgbRed//红色分量BYTErgbGreen//绿色分量BYTErgbBlue//蓝色分量BYTErgbReserved//保留位有些位图需要颜色表;有些位图(如真彩色图)则不需要颜色表,颜色表的长度由BITMAPINFOHEADER结构中biBitCount分量决定。对于biBitCount值为1的二值图像,每像素占1bit,图像中只有两种(如黑白)颜色,颜色表也就有21=2个表项,整个颜色表的大小为2*sizeof(RGBQUAD)=2*4=8个字节;对于biBitCount值为8的灰度图像,每像素占8bit,图像中有28=256种颜色,颜色表也就有256个表项,且每个表项的R、G、B分量相等,整个颜色表的大小为256*sizeof(RGBQUAD)=256*4=1024个字节;而对于biBitCount=24的真彩色图像,由于每像素3个字节中分别代表了R、G、B三分量的值,此时不需要颜色表,因此真彩色图的BITMAPINFOHEADER结构后面直接就是位图数据。(4)位图数据紧跟在颜色表之后的是图像数据字节阵列,即图像数据,记录了图像的每一个像素值。对于有颜色表的位图,位图数据就是该像素颜色在调色板中的索引值;对于真彩色图,位图数据就是实际的R、G、B值(三个分量的存储顺序是B、G、R)。相应地,对于2色图象,用1位表示颜色,因此一个字节表示8个像素;对于16色图象,用4位表示一个像素的颜色,一个字节表示2个像素;对于256色图象,用8位表示一个像素的颜色,一个字节只表示1个像素。图像的每一扫描行由表示图像的像素的连素字节组成,每一行的字节数取决于图像的颜色数目和用像素表示的图像宽度。扫描行是由底向上存储的,这就是说,阵列中的每一个字节表示位图左下角的像素,而