第6章图像编程与文字处理.ppt
《第6章图像编程与文字处理.ppt》由会员分享,可在线阅读,更多相关《第6章图像编程与文字处理.ppt(29页珍藏版)》请在三一办公上搜索。
1、第6章 图像编程与文字处理 精雕细琢,美化应用程序,教学内容6.1 图形设备接口6.2 常用绘图函数6.3 绘图工具6.4 字体与文字处理6.5 位图6.6 综合实例建立宾馆管理系统的启动界面6.7 小结 思考与练习,6.1 图形设备接口,6.1.1 设备环境类在Windows程序中,应用程序的输出并不直接面向物理的设备,如显示屏或打印机,而是针对一个称之为设备环境(Device Context)的逻辑设备进行操作,设备环境与实际设备之间的信息传送由Windows直接管理。在MFC应用程序中,所有的绘制调用均通过相应的设备环境对象实现,设备环境对象封装了相应的Windows API功能,由一个
2、32位的HDC类型句柄标识。在MFC类库中,用CDC类封装设备文本对象。,6.1 图形设备接口,6.1.1 设备环境类1、设备环境类(CDC)CDC类直接继承自CObject类,它是设备上下文对象的基类。CDC基类定义了设备描述表对象,并且提供在显示器、打印机或Windows用户区上绘图的方法,它封装了使用设备环境的GDI函数。所有的绘图操作都是直接或间接运用了CDC的成员函数,这些函数有的进行设备描述表操作,有的是用来画图的,还有的函数是用来获取或设置绘图属性,为映像和视图服务的。2、派生类CPaintDCCPaintDC是从CDC派生出来的设备描述表类,它常常在窗口的OnPaint函数中使
3、用。查看MFC的源代码(StudioVC98MFCSRCviewcore.cpp)中的OnPaint函数的实现可以知道,OnPaint函数首先构造一个CPaintDC对象,再调用OnPrepareDC()函数将其准备好,最后以这个准备好的CPaintDC对象指针为参数,来调用OnDraw函数进行各种图形处理。,6.1 图形设备接口,6.1.1 设备环境类3、派生类CClientDC(管理客户区)CClientDC类只能在客户区绘图。所谓客户区是指窗口区域中去掉边框、标题栏、菜单栏、工具栏、状态栏等以外的部分,它是用户可以操作的区域。例如打开Word文档将是将某个.doc文件显示在其客户区域中。
4、在使用CClientDC进行绘图时,一般要调用GetClientRect函数来获取客户区域的大小。4、派生类CWindowDC(管理框架窗口)CWindowDC类直接从CDC派生,它使调用和释放整个窗口(包括客户区和非客户区)的设备环境过程自动化。CWindowDC对象在构造时调用Windows API函数GetWindowDC,在析构时调用相应的API函数ReleaseDC,这意味着CWindowtDC对象可访问CWnd所指向的整个屏幕区域。,6.1 图形设备接口,6.1.2 使用GDI对象在选择GDI对象进行绘图时,往往遵循着下列的步骤:(1)在堆栈中定义一个GDI对象(如CPen、CBr
5、ush对象),然后用相应的函数(如CreatePen、CreateSolidBrush)创建此GDI对象。(2)将构造的GDI对象选入当前设备环境中,但不要忘记将原来的GDI对象保存起来。(3)绘图结束后,恢复当前设备环境中原来的GDI对象。(4)由于GDI对象是在堆栈中创建中,当程序结束后,框架会自动删除程序创建的GDI对象。,6.1 图形设备接口,6.1.3 坐标映射Windows的GDI(graphics device interface)支持两种坐标系,即逻辑坐标系和物理坐标系,分别连接应用程序和图形物理设备。物理坐标是指物理设备的坐标系,它的单位是真正的长度单位,有英寸(in)和毫米
6、(mm)两种,它的原点在屏幕的左上角,X轴向右递增,Y轴向下递增。逻辑坐标指的是在窗口下的坐标,逻辑坐标的单位是逻辑像素。在Windows系统中,总共有三种物理坐标(又叫设备坐标),分别是屏幕坐标、用户区坐标、全窗口坐标。1客户区坐标系统:客户区坐标系统是最常见的坐标系统,以窗口客户区左上角为原点(0,0),主要用于窗口客户区绘图输出以及处理窗口的一些消息。鼠标消息WM_LBUTTONDOWN、WM_MOUSEMOVE传给框架的消息参数以及CDC一些用于绘图的成员都是使用客户区坐标。2屏幕坐标系统:屏幕坐标系统是另一类常用的坐标系统,以屏幕左上角为原点(0,0)。一些与窗口客户区不相关的函数均
7、以屏幕坐标为单位,例如设置和取得光标位置的函数SetCursorPos()和GetCursorPos();由于光标可以在任何一个窗口之间移动,它不属于任何一个单一的窗口,因此使用屏幕坐标。弹出式菜单使用的也是屏幕坐标。另外,CreateWindow()和MoveWindow()等函数用于设置窗口相对于屏幕的位置,使用的也是屏幕坐标系统。3窗口坐标系统:窗口坐标系统以窗口左上角为坐标原点,它包含了窗口控制菜单、标题栏等内容。一般情况下很少在窗口标题栏上绘图,因此这种坐标系统很少使用。,6.1 图形设备接口,6.1.4 与绘图有关的类和结构在图形绘制操作中,常常需要使用MFC中的CPoint、CS
8、ize和CRect等简单数据类由于CPoint(点)、CSize(大小)和CRect(矩形)是对Windows的POINT、SIZE和RECT结构的封装,因此它们可以直接使用各自结构的数据成员,如下所示:typedef struct tagPOINT LONG x;/点的x坐标 LONG y;/点的y坐标 POINT;typedef struct tagSIZE LONG cx;/矩形的长度 LONG cy;/矩形的宽度 SIZE;typedef struct tagRECT LONG left;/矩形左上角点的x坐标 LONG top;/矩形左上角点的y坐标 LONG right;/矩形右下
9、角点的x坐标 LONG bottom;/矩形右下角点的y坐标 RECT;,6.2 常用绘图函数,6.2.1 画点与画线1、画点 画点是最基本的绘图操作之一,它是通过调用CDC:SetPixel或CDC:SetPixelV 函数来实现的。这两个函数都是用来在指定的坐标上设置指定的颜色,只不过SetPixelV函数不需要返回实际像素点的RGB值;正是因为这一点,函数SetPixelV要比SetPixel快得多。COLORREF SetPixel(int x,int y,COLORREF crColor);COLORREF SetPixel(POINT point,COLORREF crColor)
10、;BOOL SetPixelV(int x,int y,COLORREF crColor);BOOL SetPixelV(POINT point,COLORREF crColor);其中参数point指定所绘制的点,crColor指定画点所用的颜色。倘若要在屏幕的(100,100)处画一个红色点,则代码为:pDC-SetPixel(CPoint(100,100),RGB(255,0,0);实际显示像素的颜色未必等同于crColor所指定的颜色值,因为有时受设备限制,不能显示crColor所指定的颜色值,而只能取其近似值。与上述函数相对应的GetPixel函数是用来获取指定点的颜色。COLORR
11、EF GetPixel(int x,int y)const;COLORREF GetPixel(POINT point)const;,6.2 常用绘图函数,6.2.1 画点与画线2、画线画线也是特别常用的绘图操作之一。CDC的LineTo和MoveTo函数就是用来实现画线功能的两个函数,通过这两个函数的配合使用,可完成任何直线和折线的绘制操作。CDC:MoveTo用来移动当前点到指定点,返回当前点的坐标。它有两种调用形式,其函数原型如下:CPoint MoveTo(int x,int y);CPoint MoveTo(POINT point);参数x为新位置的x坐标,y为新位置的y坐标;poi
12、nt为新位置的坐标.CDC:LineTo函数用来绘制一条从当前点到指定点的直线,返回是否绘制成功的标志,其原型如下:BOOL LineTo(int x,int y);BOOL LineTo(POINT point);参数x为指定点的x坐标,y为指定点的y坐标;point为指定点的坐标.,6.2 常用绘图函数,6.2.1 画点与画线3、折线除了LineTo函数可用来画线之外,CDC中还提供了一系列用于画各种折线的函数。它们主要是Polyline、PolyPolyline和PolylineTo。这三个函数中,Polyline和PolyPolyline既不使用当前位置,也不更新当前位置;而Polyl
13、ineTo总是把当前位置作为起始点,并且在折线画完之后,还把折线终点所在位置设为新的当前位置。这几个函数的原型如下:BOOL Polyline(LPPOINT lpPoints,int nCount);BOOL PolylineTo(const POINT*lpPoints,int nCount);这两个函数用来画一系列连续的折线,参数lpPoints是POINT或CPoint的顶点数组;nCount表示数组中顶点的个数,它至少为2。BOOL PolyPolyline(const POINT*lpPoints,const DWORD*lpPolyPoints,int nCount);此函数可用
14、来绘制多条折线。其中lpPoints同前定义,lpPolyPoints表示各条折线所需的顶点数,nCount表示折线的数目。,6.2 常用绘图函数,6.2.2 矩形和圆角矩形CDC提供的Rectangle和RoundRect函数分别用于矩形和圆角矩形的绘制,它们的原型如下:BOOL Rectangle(int x1,int y1,int x2,int y2);BOOL Rectangle(LPCRECT lpRect);BOOL RoundRect(int x1,int y1,int x2,int y2,int x3,int y3);BOOL RoundRect(LPCRECT lpRect,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 编程 文字处理

链接地址:https://www.31ppt.com/p-5909603.html