第 7章 位图应用
1,位图的基本概念
位图基础知识
位图的结构与表示
2,在 VC中使用与操作位图
使用 CBitmap类操作位图
使用 API函数操作 DDB位图
使用 API函数操作 DIB位图
3,位图应用的实例
位图按钮的实现位图基础知识
1,位图与矢量图
位图:光栅图,以像素来表示图像,记录每个像素的颜色、亮度等属性
矢量图:采用数学方法来描述构成图像的一系列形状和线段
2,位图的彩色模式
颜色深度:描述每个像素占用的二进制位数
彩色模式:在描述颜色时,需要对颜色数字化,在显示颜色时,
需要解析描述颜色的数据并将颜色信息恢复到输出设备上,这种描述颜色的数值化方法称为彩色模式,RGB,CMYK
3,Windows中的位图
DDB位图:依赖与显示设备的位图
DIB位图:设备无关位图位图的结构与表示
1,DDB位图的结构与表示
与设备相关位图只能存在于内存中
结构信息由结构体 BITMAP描述,说明位图类型、尺寸、
颜色格式、位数等信息
CBitmap类封装了对 DDB位图的操作
2,DIB位图:可以以磁盘文件的形式存在,描述信息由以下四个部分构成
文件头,BITMAPFILEHEADER结构体描述,说明类型、
文件大小(字节)及图形数据的起始位置
位图信息头:由 BITMAPINFO描述,包含两部分
BITMAPINFOHEADER,描述位图大小及颜色格式
颜色信息,RGBQUAD,描述图形的颜色表
位图数据区:记录位图的每一个像素使用 CBitmap类操作位图
1,读取并显示位图
插入位图资源并分配资源标识符
构造位图类对象,使用 LoadBitmap将位图资源装入
构造内存设备上下文,CreateCompatibleDC
将位图选入内存设备上下文,SelectObject
使用 BitBlt,StretchBlt将位图输出到显示设备上下文
2,绘制并显示位图
构造内存设备上下文
构造位图类对象并对其初始化,CreateCompatibleBitmap等
将位图对象选入内存设备上下文
调用内存设备上下文的 GDI函数绘制位图
调用 BitBlt,StretchBlt输出位图到显示设备上下文使用 API函数操作 DDB位图
1,创建位图,CreateCompatibleBitmap,CreateBitmap
2,创建内存设备上下文,CreateCompatibleDC
3,BitBlt,StretchBlt绘图函数
4,要点:掌握句柄与类对象之间的相互转换
API函数使用句柄标识位图、设备上下文等对象
可以将位图句柄转换为位图类对象,调用格式为 Cbitmap
*pBitmap = Cbitmap:FromHandle ( hBitmap )
将句柄转换为位图类对象,HBITMAP hBitmap =
(HBITMAP) pBitmap->GetSafeHandle()
设备上下文类对象和句柄也可以采用类似的方法相互转换使用 API函数操作 DIB位图
1,从 DDB位图中产生 DIB位图,GetDIBits
2,将 DIB位图转换为 DDB位图,SetDIBits,CreateDIBitmap等
3,输出 DIB位图,StretchDIBits
4,实例:实现应用程序的启动画面
实质:在显示程序窗口之前,创建窗口显示位图,经过适当延时后,关闭位图窗口,继续程序运行
插入位图,分配资源标识符
创建用来显示位图的窗口类( CWnd派生)
在窗口类的 Create函数中,创建位图,获取位图信息,将
DIB位图转换为 DDB位图,将窗口显示于屏幕中央
映射窗口类的 WM_PAINT消息,输出位图
在应用程序类的 InitInstance创建并更新窗口,延时后关闭之
要点:,:GetDC(NULL),可获得操作整个屏幕的设备上下文位图按钮的实现
1,制作位图,每个按钮最多 4种状态,可制作 1~4个位图文件
2,将位图插入资源中,分配字符串标识符
3,添加按钮控件,设置属性的 Ownerdraw属性
4,在对话框类中添加 CBitmapButton类对象成员,在构造函数中调用
LoadBitmaps,将位图资源装入位图按钮类对象中
5,在对话框的 InitDialog中,调用 SubclassDlgItem,用位图按钮类的消息映射接替按钮类的消息映射
6,更简洁的方法:
添加按钮控件,制作位图并插入位图资源中
设置按钮的 Caption属性(英文不重复),设置字符串标识符为对应按钮的 Caption(转换为大写)加上表示状态的大写字母
( U,D,F,X)
定义 CBitmapButton成员变量,在构造函数中调用 AutoLoad成员,自动实现按钮与位图资源的关联