BMP文件格式简介 bmp格式文件下载

1.2BMP文件结构及其存取

数字图像在外存储器设备中的存储形式是图像文件,图像必须按照某个已知的、公认的数据存储顺序和结构进行存储,才能使不同的程序对图像文件顺利进行打开或存盘操作,实现数据共享。图像数据在文件中的存储顺序和结构称为图像文件格式。目前广为流传的图像文件格式有许多种,常见的格式包括BMP、GIF、JPEG、TIFF、PSD、DICOM、MPEG等。在各种图像文件格式中,一部分是由某个软硬件厂商提出并被广泛接受和采用的格式,例如BMP、GIF和PSD格式;另一部分是由各种国际标准组织提出的格式,例如JPEG、TIFF和DICOM,其中JPEG是国际静止图像压缩标准组织提出的格式,TIFF是由部分厂商组织提出的格式,DICOM是医学图像国际标准组织提出的医学图像专用格式。

BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,所以称为位图(bitmap)文件,因其文件扩展名为BMP,故称为BMP文件格式,简称BMP文件。本书对图像的算法编程都是针对BMP图像文件的,因此在本章中我们详细介绍BMP文件结构及其读写操作,以加深对图像数据的理解。

1.2.1BMP文件结构

如图1-7所示,BMP图像文件被分成4个部分:位图文件头(Bitmap File Header)、位图信息头(Bitmap InfoHeader)、颜色表(Color Map)和位图数据(即图像数据,Data Bits或Data Body)。

第1部分为位图文件头BITMAPFILEHEADER,是一个结构体类型,该结构的长度是固定的,为14个字节。其定义如下:

typedef struct tagBITMAPFILEHEADER
{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER,
*PBITMAPFILEHEADER;

BITMAPFILEHEADER结构的各个域详细说明如下:

bfType:位图文件类型,必须是0x424D,即字符串“BM”,也就是说,所有的“*.bmp”文件的头两个字节都是“BM”。

bfSize:位图文件大小,包括这14个字节。

bfReserved1, bfReserved2:Windows保留字,暂不用。

bfOffBits:从文件头到实际的位图数据的偏移字节数,图1-7中前3个部分的长度之和。

图1-7BMP文件结构示意图
第2部分为位图信息头BITMAPINFOHEADER,也是一个结构体类型的数据结构,该结构的长度也是固定的,为40个字节(WORD为无符号16位整数,DWORD为无符号32位整数,LONG为32位整数)。其定义如下:
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER,
*PBITMAPINFOHEADER;

BITMAPINFOHEADER结构的各个域的详细说明如下:

biSize:本结构的长度,为40个字节。

biWidth:位图的宽度,以像素为单位。

biHeight:位图的高度,以像素为单位。

biPlanes:目标设备的级别,必须是1。

biBitCount:每个像素所占的位数(bit),其值必须为1(黑白图像)、4(16色图)、8(256色)、24(真彩色图),新的BMP格式支持32位色。

biCompresssion:位图压缩类型,有效的值为BI_RGB(未经压缩)、BI_RLE8、BI_RLE4、BI_BITFILEDS(均为Windows定义常量)。这里只讨论未经压缩的情况,即biCompression=BI_RGB。

biSizeImage:实际的位图数据占用的字节数,该值的大小在第4部分位图数据中有具体解释。

biXPelsPerMeter:指定目标设备的水平分辨率,单位是像素/米。

biYPelsPerMeter:指定目标设备的垂直分辨率,单位是像素/米。

biClrUsed:位图实际用到的颜色数,如果该值为零,则用到的颜色数为2的biBitCount次幂。

biClrImportant:位图显示过程中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。

第3部分为颜色表。颜色表实际上是一个RGBQUAD结构的数组,数组的长度由biClrUsed指定(如果该值为零,则由biBitCount指定,即2的biBitCount次幂个元素)。RGBQUAD结构是一个结构体类型,占4个字节,其定义如下:

typedef struct tagRGBQUAD
{
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
}RGBQUAD;

RGBQUAD结构的各个域的详细说明如下:

rgbBlue:该颜色的蓝色分量;

rgbGreen:该颜色的绿色分量;

rgbRed:该颜色的红色分量;

rgbReserved:保留字节,暂不用。

有些位图需要颜色表;有些位图(如真彩色图)则不需要颜色表,颜色表的长度由BITMAPINFOHEADER结构中biBitCount分量决定。对于biBitCount值为1的二值图像,每像素占1bit,图像中只有两种(如黑白)颜色,颜色表也就有21=2个表项,整个颜色表的大小为个字节;对于biBitCount值为8的灰度图像,每像素占8bit,图像中有颜色,颜色表也就有256个表项,且每个表项的R、G、B分量相等,整个颜色表的大小为个字节;而对于biBitCount=24的真彩色图像,由于每像素3个字节中分别代表了R、G、B三分量的值,此时不需要颜色表,因此真彩色图的BITMAPINFOHEADER结构后面直接就是位图数据。

第4部分是位图数据,即图像数据,其紧跟在位图文件头、位图信息头和颜色表(如果有颜色表的话)之后,记录了图像的每一个像素值。对于有颜色表的位图,位图数据就是该像素颜色在调色板中的索引值;对于真彩色图,位图数据就是实际的R、G、B值(三个分量的存储顺序是B、G、R)。下面分别就2色、16色、256色和真彩色位图的位图数据进行说明:

对于2色位图,用1位就可以表示该像素的颜色,所以1个字节能存储8个像素的颜色值。

对于16色位图,用4位可以表示一个像素的颜色。所以一个字节可以存储2个像素的颜色值。

对于256色位图,1个字节刚好存储1个像素的颜色值。
BMP文件格式简介 bmp格式文件下载

对于真彩色位图,3个字节才能表示1个像素的颜色值。

需要注意两点:

第一,Windows规定一个扫描行所占的字节数必须是4的倍数,不足4的倍数则要对其进行扩充。假设图像的宽为biWidth个像素、每像素biBitCount个比特,其一个扫描行所占的真实字节数的计算公式如下:

DataSizePerLine = (biWidth * biBitCount /8+ 3) / 4*4
那么,不压缩情况下位图数据的大小(BITMAPINFOHEADER结构中的biSizeImage成员)计算如下:
biSizeImage = DataSizePerLine * biHeight

第二,一般来说,BMP文件的数据是从图像的左下角开始逐行扫描图像的,即从下到上、从左到右,将图像的像素值一一记录下来,因此图像坐标零点在图像左下角。

  

爱华网本文地址 » http://www.aihuau.com/a/25101014/234152.html

更多阅读

怎么样下载txt格式电子书? azw3格式电子书下载

怎么样下载txt格式电子书?——简介现在大家都比较喜欢看电子书,但因为各种条件有限,大多数亲们都用手机看电子书,但又因流量流失快,所以在这里教亲们怎么样在电脑上下载电子书?建议亲们,先把电子书下载到电脑的桌面上的一个文件夹,然后再用

安装迅雷后,如何不用迅雷下载软件或文件 下载文件时不用迅雷

安装迅雷后,如何不用迅雷下载软件或文件迅雷是一款专门的下载工具,用它下载比普通下载快很多,所以很多人都选择了迅雷来下载软件或文件,尤其是在网上下载很大的东西,迅雷的下载速度就体现出来了,能节省很多时间。当我们安装完迅雷后,它

GHO镜像文件是什么,怎么找到GHO文件 win8镜像gho文件下载

很多人购买电脑的时候,看到电脑公司给电脑装系统的时候,只要插上一个U盘,简单的几下操作,电脑系统就装好了。现在的电脑很少使用光驱了,因为光驱的用途越来越少,被网络和各种移动存储代替。很多人想学习用U盘给电脑装系统。网上很多制作U

声明:《BMP文件格式简介 bmp格式文件下载》为网友梦一样的人生分享!如侵犯到您的合法权益请联系我们删除