1 BMP 文件的结构 在进行图像处理程序设计时,常用到Windows 位图文件(即BMP 文件) .Windows 位图是映射到显示像素的位阵列,它有两种类型: GDI 位图和DIB.GDI 位图又称DDB ,是设备相关的,其位的排列取决于显示设备,而DIB 是设备无关的,它具更强的灵活性与完整的图像数据、压缩方式等定义,既可以存放在于内存也可以以文件形式保存在磁盘上(BMP 文件) .对于内存中DIB ,它包含两部分信息: (1) 位图信息(BITMAPINFO) ,包括位图信息头和颜色表; (2) 位图数据,而对于BMP 文件则还要加上位图文件头。 BITMAPFIL EHEADER 结构中含有文件类型、文件长度和位图数据在文件内的起始位置等信息,BITMAPINFOHEADER 结构包含位图高度和宽度、位平面数、每像素所占bit 数、颜色表项数、位图压缩类型等信息,RGBQUAD 结构给出的颜色表是该位图图像使用的调色板,并非所有BMP 位图都有颜色表,这可由BITMAPINFOHEADER 结构的biBitCount (每像素所占bit 数) 成员来区别,biBitCount 为1 (黑白二色图) 、4 (16 色图) 、8 (256 色图) 时由颜色表项数指出颜色表大小,biBitCount 为16 (16 位色图) 、24 (真彩色图) 、32 (32 位色图) 时没有颜色表。 这些信息正是在对位图处理和显示时所需的。 类库使用封装了Windows API 函数的设备相关类CDC 和GDI 对象类CBitmap 来操作位图,但CBitmap 类必须在应用编译时将BMP 位图装入资源中,在应用运行时由其成员函数及CDC 类的成员函数操作它。BMP 文件装入资源后被转换为DDB ,类Cbitmap 正是对一系列DDB 操作的API 函数的封装。但将位图装入资源导致可执行文件增大且只能使用资源中有限的位图,无法选取其它位图。为此,在图像处理程序设计时就必须直接操作BMP 位图文件,这可通过VC 的MFC 和Windows API 函数实现:CFile 类的成员函数可打开BMP 文件并读入内存; CPalette 类成员函数CreatePalette ( ) 创建调色板; Windows API 函数CreateDIBSection() 创建兼容位图; CDC 类成员函数CreateCompatibleDC ( ) 、SelectObject ( ) 、Select Palette () 、RealizePalette () 、和BitBlt () 分别是创建兼容设备描述表、将位图选进兼容DC、选择调色板、及实现调色板及显示位图。
|