《最新图形处理幻灯片.ppt》由会员分享,可在线阅读,更多相关《最新图形处理幻灯片.ppt(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、图形处理图形处理第一章第一章 概述概述1.1 图形处理研究内容图形处理研究内容1.1.1 图形的分类图形的分类1. 1. 矢量线条图形矢量线条图形2. 明暗光栅图形明暗光栅图形(2 2)显示速度,一般用每秒显示矢量线段的条数表示,显示速度取)显示速度,一般用每秒显示矢量线段的条数表示,显示速度取决决CRTCRT偏转系统的速度偏转系统的速度4. 4. 图形输入设备图形输入设备(1 1)向量型图形输入设备)向量型图形输入设备 以记录坐标点的方法输入图形,有:以记录坐标点的方法输入图形,有: 数字化仪、鼠标、光笔。数字化仪、鼠标、光笔。 数字化仪由一块平板和一个探头组成。数字化仪分为:机械式、数字化
2、仪由一块平板和一个探头组成。数字化仪分为:机械式、超声波式、电磁式。超声波式、电磁式。(2 2)光栅扫描型图形输入设备)光栅扫描型图形输入设备 采取逐行扫描,按一定密度采用方式输入图形,识别出数据是光采取逐行扫描,按一定密度采用方式输入图形,识别出数据是光栅图像,有:栅图像,有: 光栅扫描仪、数码相机等。光栅扫描仪、数码相机等。5. 图形绘制设备图形绘制设备(1 1)打印机:针打、喷墨、激光)打印机:针打、喷墨、激光(2 2)绘图机:)绘图机: 笔式绘图仪,有平板式和滚筒式笔式绘图仪,有平板式和滚筒式 喷墨绘图仪(打印机),喷墨绘图仪(打印机),HPHP喷墨绘图打印机应用最为广泛。喷墨绘图打印
3、机应用最为广泛。 技术参数:技术参数: 打印分辩率(打印分辩率(dpi): dpi): 每平方英寸点数。每平方英寸点数。 打印幅面:打印幅面:A0A0A4A4,滚筒式在长度方向可以打印数米。滚筒式在长度方向可以打印数米。1.4.1 1.4.1 图形处理软件图形处理软件1. 1. 操作系统软件操作系统软件 Windows, ManWindows, Man2. 2. 图形支撑软件图形支撑软件 UG, Pro/e, SolidWorks, AutoCAD UG, Pro/e, SolidWorks, AutoCAD3. 3. 图形开发库图形开发库 OpenGL, DirectXOpenGL, Dir
4、ectX等。等。1.5 1.5 本课程讲授的主要内容及特点本课程讲授的主要内容及特点 综合国内外最新成熟的二维、三维图形处理技术,介绍图形处理综合国内外最新成熟的二维、三维图形处理技术,介绍图形处理的基本原理和常用方法,使学生从机械的基本原理和常用方法,使学生从机械CAD应用的角度理解计算机图应用的角度理解计算机图形学的理论,为今后学习各种形学的理论,为今后学习各种CADCAD图形软件、开发与图形相关的软件图形软件、开发与图形相关的软件打下基础。打下基础。 主要内容:主要内容:图形处理基础图形处理基础 、二维图形处理、二维图形处理、三维图形处理三维图形处理 、产品产品真实感渲染及动画真实感渲染
5、及动画、图形标准化图形标准化等。等。参考书:参考书:1. 1. 计算机图形学教程,唐荣锡等编著,科学出版社,计算机图形学教程,唐荣锡等编著,科学出版社,1991 1991 2. 2. 计算机图形学计算机图形学原理、方法及应用,潘云鹤主编,高等教育出版社,原理、方法及应用,潘云鹤主编,高等教育出版社,200120013. 3. 机械机械CADCAD技术基础,童秉枢,清华大学出版社,技术基础,童秉枢,清华大学出版社,200320034. 4. 面向对象的面向对象的WindowsWindows编程技术,王培杰、张应中等编,大连理工大学出版社,编程技术,王培杰、张应中等编,大连理工大学出版社,1995
6、1995 第二章第二章 图形处理基础图形处理基础2.1 图形的几何表示图形的几何表示1、直线、直线( (Line)Line)参数表达式:参数表达式: R(t) = P + tD -t+ P P是直线上的一点,是直线上的一点,D D是直线的方向是直线的方向一般直线段用空间中两点表示:一般直线段用空间中两点表示: 起点起点 StartPStartP 终点终点 EndPEndP2、圆(、圆(Circle)Circle)参数表达式:参数表达式: R(t) = C + rXcos(t)+rYsin(t) 0t2 C:C:圆心点,圆心点,X X、Y Y为圆所在平面方向轴矢量为圆所在平面方向轴矢量 r:r:
7、圆半径圆半径 对在对在XOY平面上的圆:平面上的圆: X方向矢量:方向矢量:(1, 0, 0) Y方向矢量:方向矢量:(0, 1, 0)圆的一般定义:圆的一般定义:圆心点,圆所在平面的方向矢量,圆心点,圆所在平面的方向矢量,圆所在平面的参考方向矢量,圆半径,区域圆所在平面的参考方向矢量,圆半径,区域在在02。圆弧是圆的一部分,通过区域参数控制,如在第一象限的圆弧,区域在圆弧是圆的一部分,通过区域参数控制,如在第一象限的圆弧,区域在00.5。3、椭圆(、椭圆(Ellipse)Ellipse)参数表达式:参数表达式: R(t) = C + aXcos(t)+bYsin(t) 0t2C:C:圆心点,
8、圆心点,X X、Y Y为圆所在平面方向轴矢量为圆所在平面方向轴矢量 a:a:长轴半径,长轴半径,b:b:短轴半径短轴半径 椭椭圆的一般定义:圆的一般定义:圆心点,圆所在平面的方向矢量,圆心点,圆所在平面的方向矢量,圆所在平面的参考方向矢量(一般选长轴方向),圆所在平面的参考方向矢量(一般选长轴方向),长轴半径,短轴半径长轴半径,短轴半径 ,区域在,区域在02。椭椭圆弧是圆弧是椭椭圆的一部分,通过区域参数控制,如在第一象限的圆弧,区域在圆的一部分,通过区域参数控制,如在第一象限的圆弧,区域在00.5。 4、B B样条曲线(样条曲线(B-Spline)B-Spline)(1). (1). 样条和样
9、条函数样条和样条函数样条样条( (Spline)Spline):是在船体、汽车或航天器设计中设计员使用的弹性均匀的木条(或钢是在船体、汽车或航天器设计中设计员使用的弹性均匀的木条(或钢 条)。条)。沿着样条画出的光顺曲线是样条曲线。沿着样条画出的光顺曲线是样条曲线。19461946年年I.J.ShoenbergI.J.Shoenberg提出样条函数的概念,提出样条函数的概念,并给出严格的数学定义。并给出严格的数学定义。 由弹性力学得到梁的曲率与弯距成正比,与梁的抗弯刚度成反比,有:由弹性力学得到梁的曲率与弯距成正比,与梁的抗弯刚度成反比,有: 分段弯距分段弯距M(x)是一个线性函数,积分后所得
10、各分段上的函数是一个线性函数,积分后所得各分段上的函数y(x)是是x的三次多项式。的三次多项式。这一力学背景导致了数学上得三次样条函数得建立。这一力学背景导致了数学上得三次样条函数得建立。(2).(2).三次样条曲线三次样条曲线 已知已知n n个型值点个型值点P Pi i(x(xi i, y, yi i),i=1,2,n, ),i=1,2,n, 如何建立如何建立y=S(x)?y=S(x)? Si(x) = ai + bi(x-xi)+ci(x-xi)2+di(x-xi)3 xxi, xi+1, i=1,2,n ai, bi, ci, di为待求系数为待求系数 根据型值点的关系式(如一阶导数连续
11、、二阶导数连续),边界条件可以推导出三次根据型值点的关系式(如一阶导数连续、二阶导数连续),边界条件可以推导出三次样条曲线的矩阵表达式。样条曲线的矩阵表达式。(3).(3).BezierBezier曲线曲线 在设计时,样条曲线不直观,修改不方便,在设计时,样条曲线不直观,修改不方便,BezierBezier提出一种新的参数曲线表示方法,提出一种新的参数曲线表示方法,称为称为BezierBezier曲线,曲线, BezierBezier曲线形状是通过一组多边折线的各顶点唯一定义出来。曲线形状是通过一组多边折线的各顶点唯一定义出来。 在多边折线的各顶点中,只有第一点和最后一点在曲线上,其余顶点则用
12、于定义曲在多边折线的各顶点中,只有第一点和最后一点在曲线上,其余顶点则用于定义曲线的导数、阶次和形状,第一条和最后一条折线表示出曲线在起点和终点处的切线线的导数、阶次和形状,第一条和最后一条折线表示出曲线在起点和终点处的切线方向。方向。 BezierBezier曲线数学表达式:曲线数学表达式: 给定给定n+1n+1个点个点P P0 0,P,P1 1,P,P2 2PPn n, ,有下列有下列n n次次BezierBezier曲线:曲线: B Bi,ni,n为伯恩斯坦(为伯恩斯坦(Bernstein)Bernstein)多项式,称为基底函数。多项式,称为基底函数。当当t=0t=0时,时,P(0)=
13、P0, P(0)=P0, 当当t=nt=n时,时,P(n)=Pn, P(n)=Pn, 曲线通过多折线的起点和终点。曲线通过多折线的起点和终点。BezierBezier曲线曲线P(t)P(t)与控制多边型的关系可以这样认为:与控制多边型的关系可以这样认为: 控制多边形控制多边形P P0 0P P1 1PnPn是是P(t)P(t)的大致形状的勾画,的大致形状的勾画,P(t)P(t)是对是对P P0 0P P1 1PnPn的逼近。的逼近。 BezierBezier曲线的离散生成通过中点分割递推生成的。曲线的离散生成通过中点分割递推生成的。BezierBezier曲线在实际中有很好的应用,例如曲线在实
14、际中有很好的应用,例如TrueTypeTrueType字体字体。(4).B B样条样条( (Basic Spline Basic Spline 或或B-Spline)B-Spline) 设设P1,P2,Pn(nk)P1,P2,Pn(nk)为给定空间的为给定空间的n n个点,个点,T=ti(titi+1)T=ti(titi+1)为参数为参数t t轴上的一个分割,轴上的一个分割,下列参数曲线下列参数曲线 为为k k阶(阶(k-1)k-1)次的次的B B样条曲线,折线样条曲线,折线P1P2PnP1P2Pn为为P(t)P(t)的控制多边形,点集的控制多边形,点集 PiPi为为P(t)P(t)的控的控制
15、顶点。制顶点。Bi,k(t)为为k阶阶B样条基函数,且有:样条基函数,且有:因此因此P(t)值可以通过递推关系求得,是著名的值可以通过递推关系求得,是著名的deBoor算法。算法。 deBoor算法是将算法是将B样条样条曲线转化为若干条曲线转化为若干条Bezier曲线生成问题。曲线生成问题。一次一次B样条是折线样条,重合多边形,在实际应用中,用的最多的是三次样条是折线样条,重合多边形,在实际应用中,用的最多的是三次B样条。样条。三次三次B样条曲线的构造:样条曲线的构造:(1)输入大于等于四个空间点作为控制点,求出)输入大于等于四个空间点作为控制点,求出B样条曲线。样条曲线。(2)输入)输入B样
16、条曲线上的三个型值点,求出样条曲线上的三个型值点,求出B样条曲线,实际上是一个反问题。也就是样条曲线,实际上是一个反问题。也就是已知型值点,要找一条三次已知型值点,要找一条三次B样条曲线样条曲线L通过各通过各Pi点,解代数方程求出控制顶点,再点,解代数方程求出控制顶点,再插值出样条曲线。插值出样条曲线。三次三次B样条曲线计算算法步骤:样条曲线计算算法步骤:(1)计算各节点矢量(采用弦长法)。)计算各节点矢量(采用弦长法)。(2)计算插值的步数及步长。)计算插值的步数及步长。(3)取连续四个控制顶点及相应的节点矢量,根据前面的递推关系,计算三层系数值)取连续四个控制顶点及相应的节点矢量,根据前面
17、的递推关系,计算三层系数值 得到插值的得到插值的P(t)值,值,(4)将计算得到的)将计算得到的P(t)值与上一步长计算的值与上一步长计算的P(t)值用直线连接。值用直线连接。计算节点矢量计算节点矢量void CSplineCons:CalculateKnotNormal() if(numCtrlPts3)return;pKnotVal = new doublenumCtrlPts+3;for(int i=0; i4; i+) pKnotVali=0.;double u=PtPtDis(pCtrlPoints0, pCtrlPoints1);/两点距离两点距离for(i=1; inumCtrl
18、Pts-1; i+) u = u + PtPtDis(pCtrlPointsi, pCtrlPointsi+1); pKnotVali+3=u; for(i=1; inumCtrlPts-1; i+) pKnotVali+3=pKnotVali+3/u; for(i=numCtrlPts-1; inumCtrlPts+3; i+) pKnotVal3+i=1.;void CSplineCons:DrawCurve(CDC* pDC, VportParameter Vps)if(numCtrlPts3)return;double a42,b32,c22,d2;double ui6,a13,a22
19、,a3;double u=0.0;double deta=10.0;int i,j,s;int m;double step; VpMoveTo(pDC, pCtrlPoints0.x, pCtrlPoints0.y, Vps);/计算步数和步长计算步数和步长m=LineNum*numCtrlPts; if(m36) m=36;step=1.0/m;/画画B样条曲线样条曲线 int ip=0; int ik=1;for(s=0;s=m;s+)/取连续四个控制顶点取连续四个控制顶点for(i=0;i=3;i+)ai0=pCtrlPointsip+i.x;ai1=pCtrlPointsip+i.y;
20、/取相应的取相应的uifor(i=0;i=5;i+)uii=pKnotValik+i;/计算第一层:计算第一层:Dj和和ajfor(i=0;i=2;i+)a1i=(u-uii)/(uii+3-uii);for(i=0;i=2;i+)for(j=0;j=1;j+)bij=(1-a1i)*(aij)+a1i*(ai+1j);/计算第二层:计算第二层:Dj和和ajfor(i=0;i=1;i+)a2i=(u-uii+1)/(uii+3-uii+1);for(i=0;i=1;i+)for(j=0;j=1;j+)cij=(1-a2i)*(bij)+a2i*(bi+1j);/计算第三层:计算第三层:Dj和和
21、aja3=(u-ui2)/(ui3-ui2);for(j=0;j1.0) break;/判断判断ui是否应该变为是否应该变为ui+1double bijiao=u-pKnotValik+3;while(bijiao0)ip+;ik+;bijiao=u-pKnotValik+3; VpLineTo(pDC, pCtrlPointsnumCtrlPts-1.x, pCtrlPointsnumCtrlPts-1.y, Vps);2.2 2.2 图形的特性表示图形的特性表示1. 1. 颜色颜色 在计算机中表示颜色主要方法是在计算机中表示颜色主要方法是RGBRGB三元组:三元组: 将红色值将红色值R(R
22、ed)R(Red)、绿色值绿色值G(Green)G(Green)、篮色值篮色值B(Blue)B(Blue)三种颜色组合出一个无符号的长三种颜色组合出一个无符号的长整数(四字节整数(四字节3232位)表示图形颜色。位)表示图形颜色。 每个颜色域定义每个颜色域定义02550255色彩浓度,这样组合起来有一千六百多万种颜色,在色彩浓度,这样组合起来有一千六百多万种颜色,在WindowsWindows中,一般采用一个宏表示:中,一般采用一个宏表示: COLORREF rgbColor = RGB(nRed, nGreen, nBlue)COLORREF rgbColor = RGB(nRed, nGr
23、een, nBlue) 例:例:RGB(0,0,0)RGB(0,0,0)表示黑色,表示黑色, RGB(255,255,255)RGB(255,255,255)表示白色,表示白色,RGB(255,0,0)RGB(255,0,0)表示红色。表示红色。 2. 2. 线型线型 在工程图纸中,线型是有非常明确的表达意义的,国家制图标准定义了如下图线:在工程图纸中,线型是有非常明确的表达意义的,国家制图标准定义了如下图线:(1 1)粗实线,应用在可见的轮廓线)粗实线,应用在可见的轮廓线(2 2)细实线,应用在尺寸线、剖面线等)细实线,应用在尺寸线、剖面线等(3 3)细点画线,应用在轴线、圆中心线,对称中心
24、线等)细点画线,应用在轴线、圆中心线,对称中心线等(4 4)虚线,应用在不可见的轮廓线)虚线,应用在不可见的轮廓线(5 5)细双点画线,应用在极限位置、假设状态轮廓线等。)细双点画线,应用在极限位置、假设状态轮廓线等。 线型一般通过建立线型库,对线型建立一个文本描述的方式定义,这样用户可以方线型一般通过建立线型库,对线型建立一个文本描述的方式定义,这样用户可以方便地加载、修改线型。便地加载、修改线型。 AutoCADAutoCAD定义了一个线型库文件:定义了一个线型库文件:ACAD.LINACAD.LIN AutoCAD AutoCAD线型描述定义方式:线型描述定义方式: alignment,
25、 dash-1,dash-2,alignment, dash-1,dash-2,AlignmentAlignment是一个对准动作,一般用是一个对准动作,一般用“A”A”Dash-nDash-n表示构成线型的一个线段长度,如果长度是正值,就是落笔,也就是画的线段,表示构成线型的一个线段长度,如果长度是正值,就是落笔,也就是画的线段,负长度值是抬笔,即空白线段,长度为负长度值是抬笔,即空白线段,长度为0 0,画一个点,不断循环,只需定义一个循环段。,画一个点,不断循环,只需定义一个循环段。例如定义一虚线线型:例如定义一虚线线型: * *DASH,- - - - - - - - - DASH,-
26、- - - - - - - - A, 2, -1 A, 2, -13. 3. 图层图层定义:根据图形实体本身所具有的属性(颜色、线型)和其它应用特性等信息对实体进定义:根据图形实体本身所具有的属性(颜色、线型)和其它应用特性等信息对实体进行分类,将具有相同信息的实体放在一组,该组称为图层。行分类,将具有相同信息的实体放在一组,该组称为图层。图层具有如下特性:图层具有如下特性:(1 1)图层具有层名、颜色、线型和状态参数。)图层具有层名、颜色、线型和状态参数。(2 2)一幅图上具有的图层数目不受限制,每个图层具有的图形实体数目也不受限制。)一幅图上具有的图层数目不受限制,每个图层具有的图形实体数
27、目也不受限制。(3 3)图层有状态参数:打开和关闭、冻结和解冻,打开和关闭决定图形实体的可见性,)图层有状态参数:打开和关闭、冻结和解冻,打开和关闭决定图形实体的可见性,冻结和解冻决定图形实体的可编辑性。冻结和解冻决定图形实体的可编辑性。(4 4)可以将一个图层上的实体转换到另一个图层上。)可以将一个图层上的实体转换到另一个图层上。图层是对图形实体特性进行组织的有效方法,主要有如下功能操作:图层是对图形实体特性进行组织的有效方法,主要有如下功能操作:(1)创建新层)创建新层(2)将已有层置为当前层)将已有层置为当前层(3)打开和关闭图层)打开和关闭图层(4)冻结和解冻图层冻结和解冻图层(5 5
28、)设置图层属性(颜色、线型、线宽)设置图层属性(颜色、线型、线宽)2.3 2.3 基于基于Windows GDIWindows GDI的图形绘制的图形绘制2.3.1 2.3.1 基本图形的生成基本图形的生成 基本图形包括:直线、圆、圆弧。基本图形包括:直线、圆、圆弧。 传统(底层)的生成方法:传统(底层)的生成方法:(1 1)采用汇编语言利用)采用汇编语言利用BIOSBIOS中断(中断(INT10)INT10)输出功能,编制显示器的置点功能,或用输出功能,编制显示器的置点功能,或用C C语言函数库中的显示器置点功能。语言函数库中的显示器置点功能。(2 2)采用)采用BresenhamBrese
29、nham算法,将直线离散成一个连续的光点。算法,将直线离散成一个连续的光点。 目前一般图形绘制方法:目前一般图形绘制方法:(1 1)基于)基于Windows GDIWindows GDI的图形绘制。的图形绘制。(2 2)基于)基于OpenGLOpenGL的图形绘制。的图形绘制。2.3.2 2.3.2 Windows GDIWindows GDI1 1、什么是什么是GDI?GDI? GDI GDI就是图形设备接口(就是图形设备接口(Graphic Device Interface)Graphic Device Interface)。2 2、GDIGDI的功能特点:的功能特点:(1 1)设备无关)
30、设备无关 两个含义:一是同一图形输出功能,应用程序在不同输出设备上输出时,使用同一两个含义:一是同一图形输出功能,应用程序在不同输出设备上输出时,使用同一GDIGDI函数。函数。另一个是为某一种类型的设备编制的程序同样可以在另一种类型的设备上使用。另一个是为某一种类型的设备编制的程序同样可以在另一种类型的设备上使用。设备无关的实现:设备无关的实现: GDI绘图是在逻辑设备下绘图,通过设备驱动程序将逻辑绘图变为实际设备绘图。绘图是在逻辑设备下绘图,通过设备驱动程序将逻辑绘图变为实际设备绘图。3、GDI设备描述表(设备描述表(DC:Device Context) 设备描述表是应用程序、设备驱动程序
31、和输出设备之间的连接器,为设备描述表是应用程序、设备驱动程序和输出设备之间的连接器,为GDI正确地正确地产生图形提供必要信息。产生图形提供必要信息。(1)主要功能:描述图形绘制的特性(工具、颜色、字体等)、图形绘制的方式、)主要功能:描述图形绘制的特性(工具、颜色、字体等)、图形绘制的方式、图形绘制的区域等。图形绘制的区域等。 DC与特定设备相连,当设备描述表(与特定设备相连,当设备描述表(DC)占用设备期间,其它设备不能使用此设占用设备期间,其它设备不能使用此设备,因此当程序使用完备,因此当程序使用完DC后,一定要释放后,一定要释放DC。(2)设备表类型:设备表类型: 普通、类的、私有和窗口
32、四种类型普通、类的、私有和窗口四种类型 普通:系统窗口默认,可在窗口用户区内绘图。普通:系统窗口默认,可在窗口用户区内绘图。 类的:当窗口指定了类的:当窗口指定了CS_CLASSDC风格,风格,Windows就专门为窗口分配一个类的就专门为窗口分配一个类的DC。 私有:当窗口指定了私有:当窗口指定了CS_OWNDC风格,风格,Windows就专门为窗口分配一个私有就专门为窗口分配一个私有DC。 窗口:在窗口内的任何地方绘图,包括标题栏、菜单栏等。主要用于窗口的非客户区绘窗口:在窗口内的任何地方绘图,包括标题栏、菜单栏等。主要用于窗口的非客户区绘 图。图。(3)设备描述表的获取和释放)设备描述表
33、的获取和释放 GetDC(HWindow) ReleaseDC()4、逻辑绘图对象逻辑绘图对象 笔、刷子、字体、坐标单位等笔、刷子、字体、坐标单位等2.3.3 2.3.3 在窗口里画图在窗口里画图 GDI绘图主要有两种:绘图主要有两种: 线条:直线、折线、椭圆形线、线条:直线、折线、椭圆形线、Beizer曲线曲线 填充图:在一封闭区域内填上一定颜色的图形填充图:在一封闭区域内填上一定颜色的图形1、直线、直线(1)LineTo函数函数 LineTo(hDC, xEnd, yEnd); hDC:设备描述表句柄,设备描述表句柄, xEnd, yEnd 画线到点坐标。画线到点坐标。 一般和一般和Mov
34、eTo函数一起使用。函数一起使用。 例如画一条从点例如画一条从点(x1,y1)到到(x2, y2)的直线:的直线: MoveTo(hDC, x1, y1); LineTo(hDC, x2, y2); 如连续折线,可以连续调用如连续折线,可以连续调用LineTo函数。函数。(2)Polyline 函数函数 画有许多点的多边形时,可用此函数。画有许多点的多边形时,可用此函数。 Polyline(hDC, lpPoints, nCount); lpPoints:包含点数组指针,数组中点是一个包含点数组指针,数组中点是一个POINT结构结构 struct POINT x; y; ; nCount:点的
35、个数点的个数 例:绘制(例:绘制(0,0), (10,0), (10,30)组成的三角形组成的三角形 POINT pt = 0, 0, 10, 0, 10, 30, 0, 0; Polyline(hDC, pt, 4); 2、画填充图画填充图 填充图是边界封闭的几何图形,包括两个部分:内部区域和区域边界,区填充图是边界封闭的几何图形,包括两个部分:内部区域和区域边界,区域边界是线域边界是线条,由笔决定,内部区域由刷子决定。条,由笔决定,内部区域由刷子决定。(1)Polygon函数函数 绘制多边形填充绘制多边形填充 Polygon(hDC, lpPoints, nCount); 和前面介绍的和前
36、面介绍的Polyline 函数相似,区别在输出的结果不同。函数相似,区别在输出的结果不同。(2)Rectangle函数函数 绘制矩形填充绘制矩形填充 Rectangle(hDC, x1, y1, x2, y2); (x1,y1)是矩形的一个角,是矩形的一个角, (x2,y2)是矩形的另一个角是矩形的另一个角(3)Ellipse函数函数 绘制圆填充绘制圆填充 Ellipse(hDC, x1, y1, x2, y2); (x1,y1)是椭圆外接矩形的一个角,是椭圆外接矩形的一个角, (x2,y2)是椭圆外接矩形的另一个角。是椭圆外接矩形的另一个角。2.3.4 2.3.4 绘图属性绘图属性1、绘图坐
37、标系、绘图坐标系 绘图坐标系决定如下绘图方式:绘图坐标系决定如下绘图方式:(1)绘图单位:逻辑单位与实际设备单位间的关系。)绘图单位:逻辑单位与实际设备单位间的关系。(2)绘图方向轴,)绘图方向轴,X轴方向,轴方向, Y轴方向。轴方向。(3)绘图原点位置。)绘图原点位置。 在在GDI中,中, 通过设置绘图映像模式设置绘图坐标系,通过设置绘图映像模式设置绘图坐标系,GDI有有8种映像模式:种映像模式: (1)MM_TEXT 一个逻辑单位映像成一个像素,原点在窗口左上角,一个逻辑单位映像成一个像素,原点在窗口左上角,x轴朝右,轴朝右,y轴朝下,与轴朝下,与文本方式一致,也是缺省方式。文本方式一致,
38、也是缺省方式。 (2)MM_LOMETRIC 一个逻辑单位映像成一个逻辑单位映像成0.1毫米,原点在窗口左下角,毫米,原点在窗口左下角,x轴朝右,轴朝右,y轴朝上轴朝上。 (3)MM_HIMETERIC 一个逻辑单位映像成一个逻辑单位映像成0.01毫米,原点在窗口左下角,毫米,原点在窗口左下角,x轴朝右,轴朝右,y轴朝上。轴朝上。 (4)MM_ISOTROPIC 一个逻辑单位映像成任意的物理单位一个逻辑单位映像成任意的物理单位,x轴上的一个单位与轴上的一个单位与y轴上的一个单位轴上的一个单位相等。相等。 具体的比例因子及方向,用两个矩形区域:窗口和视口推导(后续介绍)具体的比例因子及方向,用两
39、个矩形区域:窗口和视口推导(后续介绍)。映像模式的设置:映像模式的设置: SetMapMode(nMode); 设置指定映像模式设置指定映像模式 GetMapMode(); 获取当前映像模式获取当前映像模式例如:例如:SetMapMode(MM_LOMETRIC); 2、笔笔 笔是画线的重要属性,笔决定了线的颜色、宽度和线型。笔是画线的重要属性,笔决定了线的颜色、宽度和线型。(1)库存笔)库存笔 系统库中预定义系统库中预定义3支笔:一支黑笔、一支白笔、一支无色笔。支笔:一支黑笔、一支白笔、一支无色笔。 可以用函数可以用函数 GetStockObject选取其一,例如:选取其一,例如: HPEN
40、 hPen = GetStockObject(nIndex); SelectObject(hDC, hPen); nIndex:BLACK_PEN 黑色笔,黑色笔, WHITE_PEN 白色笔白色笔 NULL_PEN 无色笔无色笔 获得笔句柄后,要将其装入到设备描述表中,并且在获得笔句柄后,要将其装入到设备描述表中,并且在DC中只能有中只能有一支笔,注意替换。一支笔,注意替换。(2)创建新笔)创建新笔 hPen = CreatePen(nPenStyle, nWidth, crColor); nWidth:笔的宽度,逻辑单位笔的宽度,逻辑单位 crColor:笔的颜色,笔的颜色,RGB定义定义
41、 nPenStyle:笔型(线型),有如下线型:笔型(线型),有如下线型: 类型类型 值值 描述描述PS_SOLID 0 实线实线PS_DASH 1 虚线虚线PS_DOT 2 点线点线PS_DASHDOT 3 点划线点划线PS_DASHDOTDOT 4 双点划线双点划线例如:例如:hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0);(3) 笔释放笔释放 DeleteObject(hPen); 笔用完后,程序应将创建的笔删除,笔用完后,程序应将创建的笔删除,Windows不能自动删除,如不不能自动删除,如不删除将永久占有资源。删除将永久占有资源。3、刷子、刷
42、子 刷子描述填充图区域内部填充的重要属性,决定填充图内部填充区域刷子描述填充图区域内部填充的重要属性,决定填充图内部填充区域的类型、颜色。的类型、颜色。(1)库存刷子)库存刷子 系统库中预定义系统库中预定义6个刷子:黑色刷、白色刷、灰色刷、浅灰色刷、深个刷子:黑色刷、白色刷、灰色刷、浅灰色刷、深灰色刷、无色刷。灰色刷、无色刷。 可以用函数可以用函数 GetStockObject选取其一,例如:选取其一,例如: HBRUSH hBrush = GetStockObject(nIndex); SelectObject(hDC, hBrush); nIndex:BLACK_BRUSH 黑色刷,黑色刷
43、, WHITE_BRUSH 白色刷,白色刷,NULL_BRUSH 无色刷无色刷 LTGRAY_BRUSH 浅灰色刷,浅灰色刷, DKGRAY_BRUSH 深灰深灰色刷,色刷, GRAY_BRUSH 灰色刷灰色刷 获得刷子句柄后,要将其装入到设备描述表中,并且在获得刷子句柄后,要将其装入到设备描述表中,并且在DC中只能中只能有一个刷子,注意替换。有一个刷子,注意替换。(2)创建新刷子)创建新刷子 ()创建各种颜色的实心刷子)创建各种颜色的实心刷子 hBrush = CreateSolidBrush(crColor); 可以用函数可以用函数 GetStockObject选取其一,例如:选取其一,例
44、如: HBRUSH hBrush = GetStockObject(nIndex); SelectObject(hDC, hBrush); nIndex:BLACK_BRUSH 黑色刷,黑色刷, WHITE_BRUSH 白色刷,白色刷,NULL_BRUSH 无色刷无色刷 LTGRAY_BRUSH 浅灰色刷,浅灰色刷, DKGRAY_BRUSH 深深灰色刷,灰色刷, GRAY_BRUSH 灰色刷灰色刷 获得刷子句柄后,要将其装入到设备描述表中,并且在获得刷子句柄后,要将其装入到设备描述表中,并且在DC中只中只能有一个刷子,注意替换。能有一个刷子,注意替换。(2)创建新刷子)创建新刷子 ()创建各
45、种颜色的实心刷子)创建各种颜色的实心刷子 hBrush = CreateSolidBrush(crColor); crColor: 颜色的颜色的RGB值值例如创建一个红色刷子:例如创建一个红色刷子: hBrush = CreateSolidBrush(crColor);()创建各种阴影图案的刷子创建各种阴影图案的刷子 hBrush = CreateHatchBrush(nIndex, crColor); nIndex指定刷子的阴影类型:指定刷子的阴影类型: HS_HORIZONTAL:水平线组成水平线组成 HS_VERTICAL:垂直线组成垂直线组成 HS_BDIAGONAL:45度向下斜线度
46、向下斜线 HS_FDIAGONAL:45度向上斜线度向上斜线2.3.5 GDI绘图应用举例绘图应用举例 HDC hDC = GetDC(Hwindow); HPEN hPen = CreatePen(PS_SOLID, 2, RGB(0,0,255); HPEN hOldPen = SelectObject(hDC, hPen); HBRUSH hBrush = CreateSolodeBrush(RGB(0, 255, 0); HBRUSH hOldBrush = SelectObject(hDC, hBrush); SetMapMode(MM_LOMETRIC); MoveTo(hDC, 0, 0); LineTo(hDC, 50, 0); LineTo(hDC, 50, 50); LineTo(hDC, 0, 0); Ellipse(hDC, 200, 200, 300,100); SelectObject(hDC, hOldPen); SelectObject(hDC, hOldBrush); DeleteObject(hPen);DeleteObject(hBrush);ReleaseDC(Hwindow, hDC);41 结束语结束语