文字和图形处理技术

上传人:飞*** 文档编号:52254516 上传时间:2018-08-19 格式:PPT 页数:60 大小:3.16MB
返回 下载 相关 举报
文字和图形处理技术_第1页
第1页 / 共60页
文字和图形处理技术_第2页
第2页 / 共60页
文字和图形处理技术_第3页
第3页 / 共60页
文字和图形处理技术_第4页
第4页 / 共60页
文字和图形处理技术_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《文字和图形处理技术》由会员分享,可在线阅读,更多相关《文字和图形处理技术(60页珍藏版)》请在金锄头文库上搜索。

1、第 9 章 文字和图形处理技术【学习目标】 与其他许多编程工具相比,Visual C+在图形、图像的处理方面更胜一筹。在编写Windows风 格的程序过程中,载入位图或者创建位图都是程序员经常使用的方法,只有熟练掌握了位图的使用 方法,才能编写出标准且美观的应用程序。本章中将介绍与Visual C+相关的图形、图像处理知识 ,对绘图所需要的类进行充分讲解,对于各种文本和位图的操作进行细致地介绍,并通过具体的实 例来对绘图函数的用法进行详细的说明。通过学习本章,读者可以达到以下学习目的: 了解GDI对象和设备上下文 掌握各种样式文本的输出 掌握各种图形的绘制 掌握对图形进行颜色填充 掌握图像的绘

2、制 掌握图像在窗口中的一些操作【学习导航】 文本和图图形图图像处处理技术术在应应用程序的许许多方面被广泛使用。例如,设计应设计应 用程序界面、设设 计计第三方控件、设计设计 多媒体应应用程序等。本章从文本输输出、图图形绘绘制和图图像显显示3个方面介绍绍了 其在Visual C+中的实现实现 。本章在书书中的学习习位置如图图9-1所示。 【知识框架】 本章学习习内容知识识框架如图图9-2所示。 本章目录n9.1 GDI概述n9.2 设备上下文介绍n9.3 GDI对象 n9.4 文本输出n9.5 绘制图形n9.6 绘制图像n9.7 课后习题9.1 GDI概述以往许多MSDOS程序采用直接向视频存储

3、区或打印机端口输送数据,这种做法不利之处是需要各种显 示卡(低分辨率彩色图形显示卡、加强图形显示卡以及图像图形阵)或打印机驱动程序,支持所有这些设 备意味着要用大量的编程来包含这些驱动程序(为每一个设备编写不同的代码)。为了减轻开发程序的难 度,Windows提供了一个抽象的接口,图形设备接口Graphics Device Interface(GDI)。另外,Windows 还提供了各种显示卡及打印机的驱动程序,这样在写程序时就可以不必关心显示卡和打印机的类型,简化 了程序开发的难度。其实,GDI是微软公司提供的一组绘图函数,通常称之为GDI函数。使用这些函数可以 绘制各种图形。本章将介绍有关

4、GDI的相关知识。 9.2 设备上下文介绍设备上下文的英文全称是Device Context,简称为DC。设备上下文是用来绘制图形的逻辑设备,编程 人员可以在该设备上绘制直线、曲线和立方体等各式各样的几何图案及在设备上输出文字。在开发应用程 序时往往要在输出设备上输出程序的运行结果。输出设备通常指的是显示器和打印机,但程序员需要了解 显示器和打印机的特性才能将结果显示在输出设备上,而了解显示器和打印机特性这个过程会花去程序员 的大部分时间,为减少开发应用程序的开发时间及开发难度,就提出设备上下文这个概念。通过使用设备 上下文,编程人员可以不必关心输出设备的具体特性,直接绘制最终的结果,而余下的

5、工作都交给系统来 完成。 在Windows应用程序中,每个窗口都关联有设备上下文,用户只要获得了窗口的设备上下文,就可以在窗 口中绘制各种文本、图形图像等信息了。 例如: 下面的语句从对话框中获得了一个设备上下文句柄,并在设备上下文中输出文本,方法如下。 (1)新建一个对话框应用程序。 (2)在对话框类的OnPoint方法中添加如下代码: void CDrawDlgDlg:OnPaint() HDC hDC;hDC = GetDC()-m_hDC;char data = “明日科技有限公司!“;TextOut(hDC,60,30,data,strlen(data);/代码省略 在向设备上下文中

6、输出文本时,文本将显示在对话框中,如图9-1所示。 9.2 设备上下文介绍Windows操作系统提供了一组Windows API函数用于在设备上下文中绘制信息,通常被称为GDI函数。 在上面的例子中使用的TextOut函数便是其中之一。在MFC中,为了方便用户绘图,提供了一个设备上下文 类CDC,该类中封装的多个方法用于在屏幕中绘制信息,这些方法多数是与GDI函数一一对应的。在后 面的章节中将逐步介绍这些方法在实际中的应用。 9.3 GDI对象为了方便用户在设备上下文中绘制信息,Windows提供了6个GDI对象,分别为画笔、画刷、字体、位 图、调色板和区域。MFC对这6个对象分别进行了封装,

7、形成了6个对应的类,分别为“CPen”、“CBrush”、 “CFont”、“CBitmap”、“CPalette”和“CRgn”。下面分别对这6个类进行介绍。 CPen CPen类封装了Windows的画笔对象。画笔对象主要用于绘制线条,通过画笔对象,可以设置绘制线条的宽 度、颜色、风格等信息。CPen类的主要方法如下。 1CreatePen方法 CreatePen方法用于动态创建一个画笔对象。 语法: BOOL CreatePen( int nPenStyle, int nWidth, COLORREF crColor ); BOOL CreatePen( int nPenStyle, i

8、nt nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL ); CreatePen方法参数说明如表9-1所示。参 数 名 称参 数 说 明nPenStyle表示画笔样式,可选值如表9-2所示nWidth表示画笔的宽度crColor表示画笔的颜色pLogBrush表示LOGBRUSH结构指针nStyleCount表示lpStyle参数的长度。如果nPenStyle不为PS_USERSTYLE ,该参数必须为0lpStyle表示用户定义的画笔风格。如果nPenStyle不为 PS_U

9、SERSTYLE,该参数必须为NULL9.3 GDI对象下面利用CreatePen方法创建了一个画笔对象,并且利用该画笔绘制了一个矩形。 例如: 绘制矩形的程序设计步骤如下。 (1)新建一个对话框应用程序。(2)在对话框类的OnPoint方法中添加如下代码: 参 数 值参数值描述PS_SOLID用于绘制实线PS_DASH用于绘制虚线PS_DOT用于绘制点线PS_DASHDOT用于绘制虚线和点线交替的直线PS_DASHDOTDOT用于绘制一虚线和两点交替的直线PS_NULL不可见画线PS_INSIDEFRAME实线画笔,用来压缩图表使之适合有界矩形PS_GEOMETRIC创建一支几何画笔PS_C

10、OSMETIC创建一支装饰画笔PS_ALTERNATE创建一支交替设置像素的画笔PS_USERSTYLE创建一支使用用户提供的风格数组的画笔PS_ENDCAP_ROUND尾帽是圆的PS_ENDCAP_SQUARE尾帽是方的PS_ENDCAP_FLAT尾帽是平面的PS_JOIN_BEVEL连接是斜截式的PS_JOIN_MITER在SetMiterLimit()函数设置的当前设置下,连接是斜接式,否则斜截式PS_JOIN_ROUND连接是圆的9.3 GDI对象void CDrawDlg1Dlg:OnPaint() HDC hDC;hDC = GetDC()-m_hDC;CPen pen;/创建一个

11、红色的宽度为2的画笔pen.CreatePen(PS_SOLID,2,RGB(255,0,0);/选中画笔SelectObject(hDC,pen);CRect rc(80,30,200,80);/利用画笔绘制矩形Rectangle(hDC,80,30,200,80);/代码省略 运行后效果如图9-2所示。 9.3 GDI对象2CreatePenIndirect方法 CreatePenIndirect方法根据LOGPEN结构信息直接创建画笔。 语法: BOOL CreatePenIndirect( LPLOGPEN lpLogPen ); lpLogPen:表示LOGPEN结构指针,该结构描述

12、了画笔的宽度、风格和颜色信息。 CBrush 画刷用来填充诸如多边形、椭圆和路径等图形内部的位图形式的像素。例如,在绘制一个矩形时,需要在矩 形内部填充颜色或位图等,这需要使用画刷对象。CBrush的主要方法如下。 1CreateSolidBrush方法 CreateSolidBrush方法用指定的颜色创建画刷。 语法: BOOL CreateSolidBrush( COLORREF crColor ); crColor:表示画刷的颜色。 下面利用CreateSolidBrush方法创建一个蓝色的画刷,并将其填充在矩形中。 例如: 填充矩形的程序设计步骤如下。 (1)新建一个对话框应用程序。

13、(2)在对话框类的OnPoint方法中添加如下代码: void CDrawDlg2Dlg:OnPaint() CDC* pDC = GetDC(); /获取对话框的设备上下文指针CBrush brush;/定义画刷对象brush.CreateSolidBrush(RGB(0,0,255);/创建蓝色的画刷pDC-SelectObject( /选中画笔CRect rc(80,30,200,80);pDC-FillRect(rc,/利用画笔绘制矩形pDC-DeleteDC();/代码省略 9.3 GDI对象效果如图9-3所示。 2CreateHatchBrush方法 CreateHatchBrus

14、h方法用于创建阴影画刷。 语法: BOOL CreateHatchBrush( int nIndex, COLORREF crColor );nIndex:表示画刷的阴影风格,可选值如表9-3所示。 参 数 值参数值描述HS_BDIAGONAL 45的向下影线,从左到右HS_CROSS水平和垂直方向以网格线做出阴影HS_DIAGCROSS45的网格线阴影HS_FDIAGONAL45的向上阴影线,从左到右HS_HORIZONTAL水平的阴影线HS_VER TICAL垂直的阴影线9.3 GDI对象3CreateBrushIndirect方法 CreateBrushIndirect方法使用LOGBR

15、USH结构信息直接创建画刷。 语法: BOOL CreateBrushIndirect( const LOGBRUSH* lpLogBrush ); lpLogBrush:表示LOGBRUSH结构指针,LOGBRUSH结构描述了画刷的风格、颜色和虚线等信息。 4CreatePatternBrush方法 CreatePatternBrush方法用于创建一个位图画刷。利用位图画刷,用户可以将位图填充到一个区域中。 语法: BOOL CreatePatternBrush( CBitmap* pBitmap ); pBitmap:表示一个位图对象指针。 下面利用CreatePatternBrush方法

16、创建一个位图画刷,并将其填充到对话框的客户区域中。 例如: 使用画刷的程序设计步骤如下。 (1)新建一个对话框应用程序。 (2)在对话框类的OnPoint方法中添加如下代码: void CDrawDlg3Dlg:OnPaint() CDC* pDC = GetDC(); /获取对话框的设备上下文指针CBrush brush;/定义画刷对象CBitmap bmp;/定义一个位图bmp.LoadBitmap(IDB_BITBRUSH);brush.CreatePatternBrush(pDC-SelectObject(/选中画笔CRect rc;GetClientRect(rc);/获取窗口的客户区域pDC-FillRect(rc,/利用画笔绘制矩形pDC-DeleteDC

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号