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