文件扩展名(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。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)