1、bmp文件结构,位图文件头(BITMAPFILEHEADER) 位图信息头(BITMAPINFORHEADER) 调色板(Palette) DIB图像数据(DIB Pixels),名称:Lena Size:512512 灰度图像,位图文件头,位图信息头,调色板,DIB图像数据,bmp文件结构位图文件头,WORD bfType=“BM” DWORD bfSize WORD bfReserved1 WORD bfReserved2 DWORD bfOffBits,位图文件头 :结构的长度是固定的,为14个字节,bfType:指定文件类型,必须是0x424D,即字符串“BM“,也就是说所有“.bmp
2、“文件的头两个字节都是“BM“。,bfSize:指定文件大小,包括这14个字节,bfReserved1和bfReserved2:为保留字,必须为0,不予考虑,bfOffBits:为从文件头到实际的位图数据的偏移字节数,即文件前三个部分的长度和,bmp文件结构位图信息头,DWORD biSize; /*本结构大小*/LONG biWidth; /*图像宽,按象素计算*/LONG biHeight; /*图像高,按象素计算*/ WORD biPlanes; WORD biBitCount; /*每象素所占位数*/DWORD biCompression; DWORD biSizeImage;LONG
3、 biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant;,位图信息头:结构的长度是固定的,为40个字节,biSize:指定这个结构的长度,为40字节,biWidth:指定图像的宽度,单位是像素,biHeight:指定图像的高度,单位是像素,biPlanes:必须是1,不予考虑,biBitCount:指定表示颜色时要用到的位数,常用的值为1(黑白二色图)、4(16色图)、8(256色)、24(真彩 色图)。,biCompression:指定位图是否压缩,有效的值为BL_RGB,BI_RLE8,BL_RL
4、E4等,我们只讨论第一种即不压缩的情况,biSizeImage:指定实际的位图数据所占用的字节数,通过以下公式计算: biSizeImage=biWidth*biHeight,要注意的是上述公式中的biWidth必须是4的整数倍(不是biWidth),表示大于或等于biWidth的最小的4的整倍数。例如:如果biWidth=240,则biWidth=240;如果biWidth=241,则biWidth=244。计算公式:biWidth =(biWidth* biBitCount/8+3)/4*4,biXPelsPerMeter:指定目标设备的水平分辨率,单位是像素/米,biYPelsPerMe
5、ter:指定目标设备的垂直分辨率,单位是像素/米,biClrUsed:指定本图像实际用到的颜色数,如果该项为零,则用到的颜色数为2的biBitCount次幂。,biClrImportant:指定本图像中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的,bmp文件结构调色板,单色DIB有2个表项16色DIB有16个表项256色DIB有256个表项真彩色DIB没有调色板每个表项长度为4字节(32位),BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved;,调色板,bmp文件结构DIB图像数据,对于位图,图像数据是该像素颜色在调色板中的索引值对于真彩色图,图像数据是实际的R、G、B值 2色位图,用1位表示1个像素 16色位图,用4位表示1个像素 256色位图, 8位(1个字节)表示1个像素。 真彩色图,3个字节表示1个像素。,bmp文件结构DIB图像数据,一般来说,BMP文件的数据是从下到上,从左到右的,即从文件中最先读取的是图像最下面一行的左边第一个像素,然后是左边第二个像素. .接下来是倒数第二行左边第一个像素,左边第二个像素. .依此类推,最后得到的是最上面一行的最右一个像素。.每行扩展到4个字节,扩展公式为:( biWidth* biBitCount/8+3)/4*4,DIB图像数据,