第8章图形图像处理 1.设备环境(DC)的概念 2.常用的几个设备环境类如 CPaintdc、 CClientDC、 CWindowDC和 CMetafileDC类的主要特点及它们在使用 方法上的区别 3.GDI的概念及常用的绘图设备类如CGdi0 bject、CPen、 CBrush、 Cfont和 CBitmap等的对象的创建和将其引入 到设备环境中的方法 4. Windows下的坐标映像方式和特点以及如何设置坐标 映像方式。 5.几种常见的 Windows的坐标映像方式下的坐标转换方 法 6.几种常见的基本图形元素如点、直线、矩形和文字 等的绘制方式 U回
返回 1 第8章 图形图像处理 1.设备环境(DC)的概念。 2.常用的几个设备环境类如CPaintDC、CClientDC、 CWindowDC和CMetaFileDC类的主要特点及它们在使用 方法上的区别。 3.GDI的概念及常用的绘图设备类如CGdiObject、CPen、 CBrush、Cfont和CBitmap等的对象的创建和将其引入 到设备环境中的方法。 4.Windows下的坐标映像方式和特点以及如何设置坐标 映像方式。 5.几种常见的Windows的坐标映像方式下的坐标转换方 法。 6.几种常见的基本图形元素如点、直线、矩形和文字 等的绘制方式
81设备环境(DC) (1)在 Windows中,显示工作是基于设备环境的。所 谓设备环境(DC)是一种 Windows数据结构,该结构包 含应用程序设备输出时所需要的信息。 (2)在使用任何绘图函数之前必须建立一个设备环境 对象 (3)在 Visual c++6.0的MC中提供了设备环境类CDC, 它封装了绘图所需要的所有函数,其中包括了大多数 的 WindOws aPi中的GDI函数。 U回
返回 2 8.1 设备环境(DC) (1)在Windows中,显示工作是基于设备环境的。所 谓设备环境(DC)是一种Windows数据结构,该结构包 含应用程序设备输出时所需要的信息。 (2)在使用任何绘图函数之前必须建立一个设备环境 对象。 (3)在Visual C++ 6.0的MFC中提供了设备环境类CDC, 它封装了绘图所需要的所有函数,其中包括了大多数 的Windows API中的GDI函数
81设备环境(DC) 8.1.1设备环境类 1.CDC类 1)CDC类是 CObject类的派生类,也是所有设备环境 类的基类。CDC类定义了一个设备描述对象,并提供了 对设备描述对象进行操作的成员函数以及对与窗口客 户区有关的显示区进行操作的成员函数 (2)CDC类提供的成员函数可以用于操作设备描述对 象、使用绘图工具、选择图形设备界面,以及操作颜 色和调色板,还用于取得和设置绘图属性、映射方式 视图和窗口范围的操作、坐标的转换、区域的使用 剪取、画线以及绘制图形和文字等操作。 U回
返回 3 8.1.1 设备环境类 1. CDC类 (1)CDC类是CObject类的派生类,也是所有设备环境 类的基类。CDC类定义了一个设备描述对象,并提供了 对设备描述对象进行操作的成员函数以及对与窗口客 户区有关的显示区进行操作的成员函数。 (2)CDC类提供的成员函数可以用于操作设备描述对 象、使用绘图工具、选择图形设备界面,以及操作颜 色和调色板,还用于取得和设置绘图属性、映射方式、 视图和窗口范围的操作、坐标的转换、区域的使用、 剪取、画线以及绘制图形和文字等操作。 8.1 设备环境(DC)
81设备环境(DC) 2. CPaintDC类 (1) CPaintDc类是CDC类的一个派生类,该类一般用在 响应WPAⅠNT消息的函数 OnPaint(中。 (2) WM PAINT消息是当窗口的某个区域需要重画时激发 的窗口消息。当程序中的消息循环接到 WM PAINT消息 时就自动调用消息处理函数 OnPaint(,如果在 OnPaint函数内定义了 CPaintDC类的对象,通过这个类 对象就可以使用CDC类的成员函数完成视图客户区中的 图形绘制操作。 U回
返回 4 2. CPaintDC类 (1)CPaintDC类是CDC类的一个派生类,该类一般用在 响应WM_PAINT消息的函数OnPaint()中。 (2)WM_PAINT消息是当窗口的某个区域需要重画时激发 的窗口消息。当程序中的消息循环接到WM_PAINT消息 时 就 自 动 调 用 消 息 处 理 函 数 OnPaint() , 如果在 OnPaint函数内定义了CPaintDC类的对象,通过这个类 对象就可以使用CDC类的成员函数完成视图客户区中的 图形绘制操作。 8.1 设备环境(DC)
81设备环境(DC) 3. CClientDC类 CClientDC类也是CDC类的派生类。它只能在窗口的客户 区(即窗口中除了边框、标题栏、菜单栏以及状态栏 外的中间部分)中进行绘图,坐标点(0,0)通常指的 是客户区的左上角。它的构造函数调用 GegDC函数,而 析构函数调用 Released函数 4. CWindowDC类 CWindowDC类也是CDC类的派生类。其成员函数可以在窗 口的客户区和非客户区(即窗口的边框、标题栏、菜 单栏以及状态栏)中绘图,坐标点(0,0)是指整个屏 幕的左上角。同 CClientDC类一样,它的构造函数调用 GegDC函数,而析构函数调用 Released函数。 U回
返回 5 3. CClientDC类 CClientDC类也是CDC类的派生类。它只能在窗口的客户 区(即窗口中除了边框、标题栏、菜单栏以及状态栏 外的中间部分)中进行绘图,坐标点(0,0)通常指的 是客户区的左上角。它的构造函数调用GegDC函数,而 析构函数调用ReleaseDC函数。 4. CWindowDC类 CWindowDC类也是CDC类的派生类。其成员函数可以在窗 口的客户区和非客户区(即窗口的边框、标题栏、菜 单栏以及状态栏)中绘图,坐标点(0,0)是指整个屏 幕的左上角。同CClientDC类一样,它的构造函数调用 GegDC函数,而析构函数调用ReleaseDC函数。 8.1 设备环境(DC)
81设备环境(DC) 5. CMdtaFileDC类 CMetafiledC类提供了一个面向 Windows图元文件的设备 环境,封装了在一个 Windows图元文件中绘图的方法 图元文件是一个与设备无关的图片的集合,由于它对 图像的保存比像素更精确,因而往往在要求较高的场 合下使用,例如 AutOCAD的图形保存等 U回
返回 6 5. CMdtaFileDC类 CMetaFileDC类提供了一个面向Windows图元文件的设备 环境,封装了在一个Windows图元文件中绘图的方法。 图元文件是一个与设备无关的图片的集合,由于它对 图像的保存比像素更精确,因而往往在要求较高的场 合下使用,例如AutoCAD的图形保存等。 8.1 设备环境(DC)
81设备环境(DC) 8.1.2几个设备环境类的主要差别 1. CWindowDC类与 CPaintDC、 CClientDC类的区别 其区别主要有以下两个方面: (1)用 CPaintdc和 CClientDC类的对象绘制图形时,绘 制区只能在客户区,而不能在非客户区;而 CwindowDC 类既可以在窗口的客户区也可以在非客户区进行图形绘 制 (2)在 CWindowDC绘图类下,坐标系是建立在整个屏幕上 的,在像素坐标方式下,坐标原点在屏幕的左上角;而 在 CPaintDc和 CClientdc绘图类下,坐标系是建立在客 户区上的,在像素坐标方式下,坐标原点在客户区的左 上角。 U回
返回 7 8.1.2 几个设备环境类的主要差别 1. CWindowDC类与CPaintDC 、CClientDC类的区别 其区别主要有以下两个方面: (1)用CPaintDC 和CClientDC类的对象绘制图形时,绘 制区只能在客户区,而不能在非客户区;而CwindowDC 类既可以在窗口的客户区也可以在非客户区进行图形绘 制。 (2)在CWindowDC绘图类下,坐标系是建立在整个屏幕上 的,在像素坐标方式下,坐标原点在屏幕的左上角;而 在CPaintDC和CClientDC绘图类下,坐标系是建立在客 户区上的,在像素坐标方式下,坐标原点在客户区的左 上角。 8.1 设备环境(DC)
81设备环境(DC) 2. CPaintdC类与 CClientDC类的区别 > CPaintDC类的对象应用在 OnPaint函数中,以响应 Windows的 WM PAINT消息;而 CClientDC类的对象应用 在非响应消息 WM PAINT的情况下 > CPaintDC类响应 WM PAINT消息,并自动完成绘制,这 对维护图形的完整性有着重要的作用。 CClientDc类可 以实时地将图形绘制到屏幕上,不需要重画;而如果 用 CPaintDC类的对象完成同样的工作,只能发出消息 让屏幕上包含这条直线的区域重画,以把这条直线绘 制到屏幕上 U回
返回 8 2. CPaintDC类与CClientDC类的区别 ➢ CPaintDC类的对象应用在OnPaint函数中,以响应 Windows的WM_PAINT消息;而CClientDC类的对象应用 在非响应消息WM_PAINT的情况下。 ➢ CPaintDC类响应WM_PAINT消息,并自动完成绘制,这 对维护图形的完整性有着重要的作用。CClientDC类可 以实时地将图形绘制到屏幕上,不需要重画;而如果 用CPaintDC类的对象完成同样的工作,只能发出消息 让屏幕上包含这条直线的区域重画,以把这条直线绘 制到屏幕上。 8.1 设备环境(DC)
81设备环境(DC) 8.1.3设备环境类的使用方法 1.CDC类 因为CDC类不能用窗口对象指针初始化对象,所以,一般不直接定义 对象 2. CPaintDC类 CPaintdc类一般用在窗口类 OnPaint函数中,可采用如下代码定义 个 CPaintdc类对象: CPaintdc dc(this 以上代码定义了一个 CPaintDc类的对象dc,并用当前的窗口对象指针 this对对象进行了初始化。 CClientDC和 CWindowDC类也采用这样的 方法 3. CClientDC类 可利用以下代码定义一个对象: CClientdc dc(this) 4. CWindowDC类 利用以下代码创建一个 CWindowDC类的对象: CWindowdc dc(this); U回
返回 9 8.1.3 设备环境类的使用方法 1. CDC类 因为CDC类不能用窗口对象指针初始化对象,所以,一般不直接定义 对象。 2. CPaintDC类 CPaintDC 类一般用在窗口类OnPaint函数中,可采用如下代码定义一 个CPaintDC类对象: CPaintDC dc(this); 以上代码定义了一个CPaintDC类的对象dc,并用当前的窗口对象指针 this对对象进行了初始化。CClientDC和CWindowDC类也采用这样的 方法。 3. CClientDC类 可利用以下代码定义一个对象:CClientDC dc(this); 4. CWindowDC 类 利用以下代码创建一个CWindowDC类的对象:CWindowDC dc(this); 8.1 设备环境(DC)
82绘图设备类 Windows为设备环境提供了各种各样的绘图工具,如【画笔】、【画 刷】以及【字体】等。在MFC中封装了这些工具,这些类称为GDI 类,它们有一个共同的抽象基类 CGdiobject,可以将这些绘图设 备类创建的对象选入到设备环境中,完成有关的操作。 在MFC中主要的绘图设备类有: CGdiobject、CPen、 CBrush、 CFont CBitmap、CRgn和 PAlette等。 在选择绘图设备类对象(GDI对象)进行绘图时,一般可按下列步 骤进行: (1)定义一个GDI对象,然后调用相应的函数(如 CreatePen、 CreateSolidBrush等)创建此GDI对象。 (2)将已构造出的GDI对象利用设备环境类对象的成员函数 Selectobject选入到当前环境中,并同时将原来的GDI对象保存起 来 (3)绘图结束后,恢复当前设备环境中原来的GDⅠ对象。 注意:在 Windows系统中包含了一些库存的GDI对象,在第(3)步中 可直接利用设备环境类(CDC)的成员函数 Selectstock:将 个 Windows库存的GD对象选入,系统可自动将原来选入的GDI对 象从设备环境中分离出来。 U回
返回 10 8.2 绘图设备类 Windows为设备环境提供了各种各样的绘图工具,如【画笔】、【画 刷】以及【字体】等。在MFC中封装了这些工具,这些类称为GDI 类,它们有一个共同的抽象基类CGdiObject,可以将这些绘图设 备类创建的对象选入到设备环境中,完成有关的操作。 在MFC中主要的绘图设备类有:CGdiObject、CPen、CBrush、CFont、 CBitmap、CRgn和CPalette等。 在选择绘图设备类对象(GDI对象)进行绘图时,一般可按下列步 骤进行: (1)定义一个GDI对象,然后调用相应的函数(如CreatePen、 CreateSolidBrush等)创建此GDI对象。 (2 )将已构造出的GDI 对象利用设备环境类对象的成员函数 SelectObject选入到当前环境中,并同时将原来的GDI对象保存起 来。 (3)绘图结束后,恢复当前设备环境中原来的GDI对象。 注意:在Windows系统中包含了一些库存的GDI对象,在第(3)步中 可直接利用设备环境类(CDC)的成员函数SelectStockObject将 一个Windows库存的GDI对象选入,系统可自动将原来选入的GDI对 象从设备环境中分离出来