第二章 数字图像基础研究.ppt
文本预览下载声明
图像文件格式 数字图像有多种存储格式,每种格式一般由不同的开发商支持。因此,要进行图像处理,必须了解图像文件的格式, 即图像文件的数据构成。 每一种图像文件均有一个文件头, 在文件头之后才是图像数据。 1 BMP图像文件格式 BMP文件的数据按照从文件头开始的先后顺序分为四个部分: ? bmp文件头(bmp file header):提供文件的格式、大小等信息 ? 位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息 ? 调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表 ? 位图数据(bitmap data):就是图像数据^_^ bmp文件头Windows为bmp文件头定义了如下结构体: typedef struct tagBITMAPFILEHEADER{ UINT16 bfType; //文件类型,在WINDOWS系统中为“BM” DWORD bfSize; //文件大小UINT16 bfReserved1; //保留字UINT16 bfReserved2; //保留字DWORD bfOffBits; //从文件头到实际位图的偏移字节数} BITMAPFILEHEADER; bmp文件头 位图信息头 BMP位图信息头结构主要用于说明位图的尺寸、压缩类型等重要信息。其结构如下: typedef struct tagBITMAPINFOHEADER{ DWORD biSize; //本结构所占字节数,实际上该结构占用40个字节,但Windows每次还是需要您亲自添上 LONG biWidth; //位图的宽度,单位为像素 LONG biHeight; //位图的高度,单位为像素 WORD biPlanes; //目标设备的平面数,约定必须为1 WORD biBitCount//每个像素所需的位数,必须是1(双色)、 4(16色)、8(256色)、24(真彩色)或32(32位真彩)之一 DWORD biCompression; //位图压缩类型,必须是0(不压缩)、1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一 DWORD biSizeImage; //位图的大小,以字节为单位,对于BI_RGB必须设置为0,对于压缩文件请参考MSDN LONG biXPelsPerMeter; //水平分辨率,每米像素数,一般不用关心,设为0 LONG biYPelsPerMeter; //垂直分辨率,每米像素数,一般不用关心,设为0 DWORD biClrUsed;//位图实际使用的颜色表中的颜色数,一般不用关心,设为0 DWORD biClrImportant;//位图显示过程中重要的颜色数,一般不用关心,设为0 } BITMAPINFOHEADER;该结构占据40个字节。 BMP的调色板结构,或叫色彩表 下面的数据就是调色板了。前面也已经提过,调色板其实是一张映射表,标识颜色索引号与其代表的颜色的对应关系。它在文件中的布局就像一个二维数组palette[N][4],其中N表示总的颜色索引数,每行的四个元素分别表示该索引对应的B、G、R和Alpha的值,每个分量占一个字节。如不设透明通道时,Alpha为0。因为前面知道,本图有256个颜色索引,因此N = 256。索引号就是所在行的行号,对应的颜色就是所在行的四个元素。 索引:(蓝,绿,红,Alpha) 0号:(fe,fa,fd,00) 1号:(fd,f3,fc,00) 2号:(f4,f3,fc,00) 3号:(fc,f2,f4,00) 4号:(f6,f2,f2,00) 5号:(fb,f9,f6,00) 等等。 一共有256种颜色,每个颜色占用4个字节,就是一共1024个字节,再加上前面的文件信息头和位图信息头的54个字节加起来一共是1078个字节。也就是说在位图数据出现之前一共有1078个字节,与我们在文件信息头得到的信息:文件头到文图数据区的偏移为1078个字节一致! 位图数据 下面就是位图数据了,每个像素占一个字节,取得这个字节后,以该字节为索引查询相应的颜色,并显示到相应的显示设备上就可以了。 注意:由于位图信息头中的图像高度是正数,所以位图数据在文件中的排列顺序是从左下角到右上角,以行为主序排列的 如果图像是24位或是32位数据的位图的话,位图数据区就不是索引而是实际的像素值了。下面说明一下,此时位图数据区的每个像素的RGB颜色阵列排布: 24位RGB按照BGR的顺序来存储每个像素的各颜色通道的值,一个像素的所有颜色分量值都存完后才存下一个下一个像素,不进行交织存储。 32位数据按照BGRA的顺序存储,其余
显示全部