请问bmp是图片文件的后缀名吗

请问bmp是图片文件的后缀名吗,第1张

bmp是图片文件的后缀名。扩展名为BMP的位图文件是Windows *** 作系统所推荐和支持的图像文件格式。

文件扩展名(filenameextension)也称为文件的后缀名,是 *** 作系统用来标记文件类型的一种机制。通常来说,一个扩展名是跟在主文件名后面的,由一个分隔符分隔。扩展名可以被认为是一个类型的元数据。

DOS作业系统(包括Windows3.x)把文件扩展名限制在3个字符以内。个人电脑(PC)自微软推出Windows95开始,在其他Windows *** 作系统上,无论是16/32比特的Windows95、Windows98、WindowsME还是32位的WindowsNT、Windows2000、WindowsXP、Windows2003和WindowsVista、Windows7的FAT32文件系统中包含有一个界面水平的修正,使得文件扩展名的字数可以达到256个英文字符(长文件名),但是在系统层面,仍然保留3个字母的命名方式,这对很多用户来说都是不可见的。NTFS文件系统则没有这种限制。

BMP文件的数据按照从文件头开始的先后顺序分为四个部分:

◆ 位图文件头(bmp file header): 提供文件的格式、大小等信息

◆ 位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息

调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表

◆ 位图数据(bitmap data):图像数据区

BMP文件头结构体定义如下:

typedef struct tagBITMAPFILEHEADER

{ UINT16 bfType //2Bytes,必须为"BM",即0x424D 才是Windows位图文件

DWORD bfSize//4Bytes,整个BMP文件的大小

UINT16 bfReserved1 //2Bytes,保留,为0

UINT16 bfReserved2 //2Bytes,保留,为0

DWORD bfOffBits//4Bytes,文件起始位置到图像像素数据的字节偏移量} BITMAPFILEHEADER

BMP信息头结构体定义如下:

typedef struct _tagBMP_INFOHEADER

{DWORD biSize //4Bytes,INFOHEADER结构体大小,存在其他版本I NFOHEADER,用作区分

LONG biWidth //4Bytes,图像宽度(以像素为单位)

LONG biHeight //4Bytes,图像高度,+:图像存储顺序为Bottom2Top,-:Top2Bottom

WORD biPlanes //2Bytes,图像数据平面,BMP存储RGB数据,因此总为1

WORD biBitCount//2Bytes,图像像素位数

DWORD biCompression//4Bytes,0:不压缩,1:RLE8,2:RLE4

DWORD biSizeImage //4Bytes,4字节对齐的图像数据大小

LONG biXPelsPerMeter //4 Bytes,用象素/米表示的水平分辨率

LONG biYPelsPerMeter //4 Bytes,用象素/米表示的垂直分辨率

DWORD biClrUsed //4 Bytes,实际使用的调色板索引数,0:使用所有的调色板索引

DWORD biClrImportant//4 Bytes,重要的调色板索引数,0:所有的调色板索引都重要

}BMP_INFOHEADER

BMP调色板结构体定义如下:

typedef struct _tagRGBQUAD

{BYTE rgbBlue //指定蓝色强度

BYTE rgbGreen //指定绿色强度

BYTE rgbRed //指定红色强度

BYTE rgbReserved //保留,设置为0} RGBQUAD

1,4,8位图像才会使用调色板数据,16,24,32位图像不需要调色板数据,即调色板最多只需要256项(索引0 - 255)。

颜色表的大小根据所使用的颜色模式而定:2色图像为8字节;16色图像位64字节;256色图像为1024字节。其中,每4字节表示一种颜色,并以B(蓝色)、G(绿色)、R(红色)、alpha(32位位图的透明度值,一般不需要)。即首先4字节表示颜色号1的颜色,接下来表示颜色号2的颜色,依此类推。

颜色表中RGBQUAD结构数据的个数有biBitCount来确定,当biBitCount=1,4,8时,分别有2,16,256个表项。

当biBitCount=1时,为2色图像,BMP位图中有2个数据结构RGBQUAD,一个调色板占用4字节数据,所以2色图像的调色板长度为2*4为8字节。

当biBitCount=4时,为16色图像,BMP位图中有16个数据结构RGBQUAD,一个调色板占用4字节数据,所以16像的调色板长度为16*4为64字节。

当biBitCount=8时,为256色图像,BMP位图中有256个数据结构RGBQUAD,一个调色板占用4字节数据,所以256色图像的调色板长度为256*4为1024字节。

当biBitCount=16,24或32时,没有颜色表。

BMP图像数据区

位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:

当biBitCount=1时,8个像素占1个字节

当biBitCount=4时,2个像素占1个字节

当biBitCount=8时,1个像素占1个字节

当biBitCount=24时,1个像素占3个字节

Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充,

一个扫描行所占的字节数计算方法:

DataSizePerLine= (biWidth* biBitCount+31)/8

// 一个扫描行所占的字节数

DataSizePerLine= DataSizePerLine/4*4// 字节数必须是4的倍数

位图数据的大小(不压缩情况下):

DataSize= DataSizePerLine* biHeight

颜色表接下来位为位图文件的图像数据区,在此部分记录着每点像素对应的颜色号,其记录方式也随颜色模式而定,既2色图像每点占1位(8位为1字节);16色图像每点占4位(半字节);256色图像每点占8位(1字节);真彩色图像每点占24位(3字节)。所以,整个数据区的大小也会随之变化。究其规律而言,可的出如下计算公式:图像数据信息大小=(图像宽度*图像高度*记录像素的位数)/8。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12042966.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存