概述
Bitmap文件格式详解
位图是Windows标准格式的图形文件。它将图像定义为由像素组成,每个点可以由多种色彩表示。位图文件图像效果好,但是非压缩格式的,需要占用较大存储空间,不利于在网络上传送。jpg格式则恰好弥补了位图文件这个缺点。
位图文件格式如下表所示:
BITMAPFILEHEADER 的结构
typedef struct tagBITMAPFILEHEADER
{
WORD bfType; 指定文件类型,必须是0x424D,即字符串“BM”,也就是说所有.bmp文件的头两个字节都是“BM”。
DWORD bfSize; 指定文件大小,包括这14个字节。
WORD bfReserved1; 为保留字,不用考虑
WORD bfReserved2; 为保留字,不用考虑
DWORD bfOffBits; 为从文件头到实际的位图数据的偏移字节数。
} BITMAPFILEHEADER;
BITMAPINFOHEADER 的结构
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize; 指定这个结构的长度,为40
LONG biWidth; 指定图象的宽度,单位是象素
LONG biHeight; 指定图象的高度,单位是象素
WORD biPlanes; 必须是1,不用考虑
WORD biBitCount 指定表示颜色时要用到的位数,常用的值为1(黑白二色图), 4(16色图), 8(256色), 24(真彩色图),32。
DWORD biCompression; 指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS(都是一些Windows定义好的常量)。要说明的是,Windows位图可以采用RLE4,和RLE8的压缩格式,但用的不多。我们今后所讨论的只有第一种不压缩的情况,即biCompression为BI_RGB的情况。
DWORD biSizeImage; 指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来:biSizeImage=biWidth’ × biHeight
要注意的是:上述公式中的biWidth’必须是4的整倍数(所以不是biWidth,而是biWidth’,表示大于或等于biWidth的,最接近4的整倍数。举个例子,如果biWidth=240,则biWidth’=240;如果biWidth=241,biWidth’=244)。如果biCompression为BI_RGB,则该项可能为零。
LONG biXPelsPerMeter; 指定目标设备的水平分辨率,单位是每米的象素个数。
LONG biYPelsPerMeter; 指定目标设备的垂直分辨率,单位同上。
DWORD biClrUsed; 指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为2biBitCount。
DWORD biClrImportant; 指定本图象中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。
} BITMAPINFOHEADER;
RGBQUAD 的结构
typedef struct tagRGBQUAD
{
BYTE rgbBlue; 该颜色的蓝色分量
BYTE rgbGreen; 该颜色的绿色分量
BYTE rgbRed; 该颜色的红色分量
BYTE rgbReserved; 保留值
} RGBQUAD;
下面是一幅具体的Bitmap图像的存储数据
一般来说,.bMP文件的数据从下到上,从左到右的。也就是说,从文件中最先读到的是图象最下面一行的左边第一个象素,然后是左边第二个象素……接下来是倒数第二行左边第一个象素,左边第二个象素……依次类推,最后得到的是最上面一行的最右一个象素。要注意的一点是在BMP位图中,位图的每行像素值要填充到一个四字节边界,即位图每行所占的存储长度为四字节的倍数,不足时将多余位用0填充。
最后
以上就是心灵美斑马为你收集整理的Bitmap文件格式的全部内容,希望文章能够帮你解决Bitmap文件格式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复