《10 图形操作.ppt》由会员分享,可在线阅读,更多相关《10 图形操作.ppt(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、10 10 设计图形应用程序设计图形应用程序 10.1 图形操作基础图形操作基础一、坐标系统(对窗体、图片框等容器对象而言):一、坐标系统(对窗体、图片框等容器对象而言):在在VB中,每个对象都定位于存放它的容器之中,对象定中,每个对象都定位于存放它的容器之中,对象定位都要使用容器的坐标系统,对象的位都要使用容器的坐标系统,对象的Left、Top属性属性指示了该指示了该对象在容器内的位置。对象在容器内的位置。每个容器每个容器都有一个坐标系统。构成一个坐标系统需要三都有一个坐标系统。构成一个坐标系统需要三个要素:个要素:坐标原点、坐标度量单位、坐标轴的方向坐标原点、坐标度量单位、坐标轴的方向。1
2、)容器的属性容器的属性ScaleTop、ScaleLeft用于确定容器左边和用于确定容器左边和顶端的坐标,它们指定了该容器顶端的坐标,它们指定了该容器左上角的坐标左上角的坐标。所有容器的。所有容器的这两个属性的默认值都为这两个属性的默认值都为0,即容器的左上角为坐标原点。,即容器的左上角为坐标原点。2)属性属性ScaleHeight、ScaleWidth确定容器对象内部垂确定容器对象内部垂直方向和水平方向的长度。直方向和水平方向的长度。Form1.topForm1.leftForm1.scaleheight0 xy(scaleleft,scaletop)Form1.height 3)属性属性S
3、caleMode决定对象坐标的度量单位,共有决定对象坐标的度量单位,共有11种种(常用(常用8种,默认的种,默认的Twip),),见下表:见下表:常数常数设置设置值值描述描述vbUser0ScaleHeight等属性值中一个的或多个设置为自定义等属性值中一个的或多个设置为自定义vbTwips1缇(缺省)缇(缺省)vbPoints2磅磅vbPixels3像素像素vbChracters4字符:水平每个单位字符:水平每个单位=120缇,垂直每个单位缇,垂直每个单位=240缇缇vbInches5英寸英寸vbMillimeters6毫米毫米vbCentimeters7厘米厘米 改变容器的改变容器的Sca
4、leMode属性值,不会改变容器的大小或属性值,不会改变容器的大小或它在屏幕上的位置,只是改变了容器的度量单位,它在屏幕上的位置,只是改变了容器的度量单位,VB会重新会重新定义对象坐标度量属性定义对象坐标度量属性ScaleHeight和和ScaleWidth。无论采用哪一种坐标单位,默认的坐标原点都为对象的左无论采用哪一种坐标单位,默认的坐标原点都为对象的左上角,横向向右为上角,横向向右为X轴的正方向,纵向向下为轴的正方向,纵向向下为Y轴的正向。轴的正向。如:当新建一个窗体时,坐标原点在窗体的左上角,如:当新建一个窗体时,坐标原点在窗体的左上角,Height=3600,Width=4800,S
5、caleLeft=0,ScaleTop=0,而:而:ScaleHeight=3195,ScaleWidth=4680二、自定义坐标系统(对容器对象而言):二、自定义坐标系统(对容器对象而言):容器对象容器对象的默认坐标系统对绘制控件不会有影响,但对的默认坐标系统对绘制控件不会有影响,但对作图作图就有较大就有较大的影响。因为习惯上绘图坐标原点是在窗体的中心。所以常需要对坐标原的影响。因为习惯上绘图坐标原点是在窗体的中心。所以常需要对坐标原点进行重新设置。设置方法为:点进行重新设置。设置方法为:对象名对象名.Scale (xLeft,yTop)-(xRight,yBottom)其中:其中:(1)S
6、cale:方法名方法名(2)(xLeft,yTop)表示对象的表示对象的左上角左上角的坐标值,的坐标值,(xRight,yBottom)为为对象的对象的右下角右下角的坐标值。的坐标值。只要给定了这两个值,只要给定了这两个值,VB系统会自动计算出系统会自动计算出ScaleTop、ScaleLeft、ScaseHeight、和和ScaleWidth的值:的值:此时:此时:ScaleTop=yTop ScaleLeft=xLeft ScaleWidth=xRight-xLeft ScaleHeight=yBottom-yTop 见见P229例例10.1三、图形层(所有对象的叠放):三、图形层(所有对
7、象的叠放):从视觉上讲,一个物体离我们有远、中、近之分。在图形构造上就从视觉上讲,一个物体离我们有远、中、近之分。在图形构造上就是图层。一般分为最上层、中间层和最下层。是图层。一般分为最上层、中间层和最下层。在在VB中,哪些对象放在哪一层,有以下规律中,哪些对象放在哪一层,有以下规律层次层次对象类型对象类型最上层最上层中间层中间层最下层最下层除标签、线条、形状以外的对象除标签、线条、形状以外的对象标签、线条、形状标签、线条、形状由图形方法绘制的图形由图形方法绘制的图形注意注意:位于上层的对象会遮盖下层相同位置上的任何对象;位于同一层内:位于上层的对象会遮盖下层相同位置上的任何对象;位于同一层内
8、的对象在发生层叠时,位于前面的对象回遮盖位于后面的对象。的对象在发生层叠时,位于前面的对象回遮盖位于后面的对象。同一层内对象排列顺序称为同一层内对象排列顺序称为Z序列序列。在设计时可以通过格。在设计时可以通过格式菜单中顺序命令调整式菜单中顺序命令调整Z序列,在运行时可以使用以下语句进序列,在运行时可以使用以下语句进行调整:行调整:对象对象.Zorder position Position:指出一个对象相对于另一个对象的位置的数值。指出一个对象相对于另一个对象的位置的数值。0:表示该对象被定位于表示该对象被定位于Z序列的前面;序列的前面;1:表示该对象被定位于表示该对象被定位于Z序列的后面。序列
9、的后面。例:作出下列效果的界面例:作出下列效果的界面10.2 绘图属性(绘图属性(窗体、窗体、pictureBox和打印机对象所具有的属性和打印机对象所具有的属性)一、当前坐标属性一、当前坐标属性(当前坐标会随着输出内容而改变当前坐标会随着输出内容而改变):窗体、窗体、pictureBox或打印机或打印机(Printer)的的CurrentX和和CurrentY属性给出了这属性给出了这些对象在绘图时的当前坐标。当坐标系确定后,常用这两个属性来指定一个坐些对象在绘图时的当前坐标。当坐标系确定后,常用这两个属性来指定一个坐标点,再在这个点上输出内容。标点,再在这个点上输出内容。例:用例:用Prin
10、t方法在窗体上随机输出方法在窗体上随机输出1000个五角星。个五角星。代码如下:代码如下:Private Sub Form_Click()For i=1 To 1000 form1.CurrentX=Form1.ScaleWidth*Rnd form1.CurrentY=Form1.ScaleHeight*Rnd form1.Print For j=1 To 1000000 Next j Next iEnd Sub二、线宽和线型属性:二、线宽和线型属性:窗体、图片框或打印机的窗体、图片框或打印机的DrawWidth属性给出这些对象上所画出(用属性给出这些对象上所画出(用方法画出)线条的宽度或点
11、的大小方法画出)线条的宽度或点的大小(以以像素像素为单位,为单位,最小及默认值为最小及默认值为1)。Drawstyle属性给出了在这些对象上所画线条的线型,意义见下表:属性给出了在这些对象上所画线条的线型,意义见下表:常数常数设置值设置值描述描述vbSolid0实线(默认)实线(默认)vbDash1虚线虚线vbDot2点线点线vbDashDot3点划线点划线vbDashDotDot4双点划线双点划线vbInsisible5无线无线vbInsideSolid6内实线内实线例:通过改变例:通过改变DrawStyle属性在窗体上画出不同的线型。通过改变属性在窗体上画出不同的线型。通过改变DrawWi
12、dth属性属性画一系列宽度递增的直线。代码如下画一系列宽度递增的直线。代码如下:Private Sub Form_Click()Dim j As Integer form1.CurrentX=0 form1.CurrentY=ScaleHeight/2 form1.DrawWidth=1 For j=0 To 6 form1.DrawStyle=j form1.Line-Step(ScaleWidth/15,0)Next j For j=1 To 6 form1.DrawWidth=j*3 form1.Line-Step(ScaleWidth/15,0)Next jEnd Sub三、填充与色彩
13、属性:三、填充与色彩属性:容器中用方法画出容器中用方法画出的封闭图形的的封闭图形的填充方式和填充颜色填充方式和填充颜色由由FillStyle和和FillColor这两个属性决定。这两个属性决定。FillColor指定填充图案的颜色,默认与指定填充图案的颜色,默认与Forecolor相同。相同。FillStyle指定填充的图案,共有指定填充的图案,共有8种,见种,见P232图图1.10.6 区别:区别:FillColor 和和ForeColor 1)VB默认采用对象的默认采用对象的ForeColor绘图,即绘制出的线条颜色;绘图,即绘制出的线条颜色;2)FillColor则是封闭图形的填充颜色。
14、则是封闭图形的填充颜色。两种颜色的设置可以使用属性窗口实现,也可以通过以下颜色函数指定色两种颜色的设置可以使用属性窗口实现,也可以通过以下颜色函数指定色彩。彩。1、RGB函数函数 格式:格式:RGB(红,绿,蓝)红,绿,蓝)从理论上讲,用三基色混合可产生从理论上讲,用三基色混合可产生256*256*256种颜色,但实际使用时受种颜色,但实际使用时受到硬件的限制。到硬件的限制。2、QBColor函数函数 格式:格式:QBColor(颜色码颜色码)其中:颜色码的取值见下表:其中:颜色码的取值见下表:颜色码颜色码颜色颜色颜色码颜色码颜色颜色颜色码颜色码颜色颜色0黑6黄12亮红1蓝7白13亮晶红2绿8
15、灰14亮黄3青9亮蓝15亮白4红10亮绿5晶红11青亮例:演示颜色的渐变填充过程例:演示颜色的渐变填充过程分析:要产生渐变效果,可多次使用分析:要产生渐变效果,可多次使用RGBRGB函数,每次对函数,每次对RGBRGB()函数的参函数的参数稍做变化。现以线段填充矩形区,通过改变直线的起终点坐标和数稍做变化。现以线段填充矩形区,通过改变直线的起终点坐标和RGBRGB函函数中的三基色的成分产生渐变效果。代码如下:数中的三基色的成分产生渐变效果。代码如下:Private Sub Form_Click()Dim j As Integer,x As Single,y As Single y=Form1.
16、ScaleHeight:x=Form1.ScaleWidth sp=255/y For j=0 To y form1.Line(0,j)-(x,j),RGB(j*sp,j*sp,j*sp)For i=1 To 10000 Next i Next jEnd Sub 10.3 图形控件图形控件 图形控件共有图形控件共有4个:个:PictureBox、Image、Line、Shape,前两个已经讲过,现介绍后两个。前两个已经讲过,现介绍后两个。一、一、Line(划线工具划线工具)Line控件可以用来划线。设计时其最重要的属性是控件可以用来划线。设计时其最重要的属性是BorderWidth和和Bord
17、erStyle属性。属性。BorderWidth确定线的宽度,确定线的宽度,BorderStyle确定线的形状。运行时确定线的形状。运行时Line控件最重要的属性是控件最重要的属性是x1、y1和和x2、y2属性,它们决定了线的两个端点的位置。属性,它们决定了线的两个端点的位置。二、二、Shape(形状形状)Shape可以用来画矩形、正方形、圆、椭圆、圆角矩形和可以用来画矩形、正方形、圆、椭圆、圆角矩形和圆角正方形。当圆角正方形。当Shape控件放到窗体时显示为一矩形,通过控件放到窗体时显示为一矩形,通过Shape属性可确定所需要的几何形状属性可确定所需要的几何形状。FillStyle属性为形状
18、填属性为形状填充图案充图案。FillColor属性为形状着色。属性为形状着色。例:用例:用Shape控件的控件的Shape属性显示属性显示Shape控件的控件的6种形状,并填种形状,并填充不同的图案。如图所示。充不同的图案。如图所示。Private Sub Form_Activate()Dim i As Integer Shape1(0).Shape=0 Shape1(0).FillStyle=2 For i=1 To 5 Load Shape1(i)Shape1(i).Left=Shape1(i-1).Left+750 Shape1(i).Shape=i Shape1(i).FillStyl
19、e=i+2 Shape1(i).Visible=True Next iEnd Sub例:用控件数组产生如图所示的表示奥运会的五环旗(自学)。例:用控件数组产生如图所示的表示奥运会的五环旗(自学)。设置:在窗体上放置一个设置:在窗体上放置一个Shape控件,设置其控件,设置其Index属性为属性为0,BorderWidth为为3。使用双重循环按行和列的顺序产生。使用双重循环按行和列的顺序产生2*2个个Shape控件数组,排列成五环。控件数组,排列成五环。运行结果如下:运行结果如下:Private Sub Form_Load()Dim mtop As Integer,mleft As Intege
20、r Dim i As Integer,j As Integer,k As Integer mtop=Shape1(0).Top mleft=Shape1(0).Left+Shape1(0).Width For i=1 To 2 For j=1 To 2 k=(i-1)*2+j Load Shape1(k)Shape1(k).Visible=True Shape1(k).Top=mtop:Shape1(k).Left=mleft mleft=mleft+Shape1(0).Width Next j mtop=mtop+Shape1(0).Width/2 mleft=Shape1(0).Left+
21、Shape1(0).Width/2 Next iEnd Sub 10.4 图形方法(容器对象所具有的)图形方法(容器对象所具有的)一、一、Line方法方法 该方法用于画该方法用于画直线或矩形直线或矩形,格式为:,格式为:对象对象.Line Step(x1,y1)step(x2,y2),颜色颜色 ,BF 其中:其中:对象:对象:指指Line在何处产生结果,常为窗体或图形框。在何处产生结果,常为窗体或图形框。(x1,y1):为线段的起点坐标或矩形的左上角坐标;为线段的起点坐标或矩形的左上角坐标;(x2,y2):为线段的终点坐标或矩形的右上角坐标;为线段的终点坐标或矩形的右上角坐标;Step:表示采
22、用当前作图位置的相对值;表示采用当前作图位置的相对值;B:表示画矩形;表示画矩形;F:表示用画矩形的颜色来填充矩形,表示用画矩形的颜色来填充矩形,F必须和必须和B一起使用,如果只有一起使用,如果只有B没有没有F,则矩形的填充由则矩形的填充由FillColor和和FillStyle决定。决定。注意:注意:用用Line方法在窗体上绘制图形时,如果将绘制过程放在方法在窗体上绘制图形时,如果将绘制过程放在Form_load事事件内,必须将窗体的件内,必须将窗体的AutoRedraw属性设置为属性设置为True,否则所绘制的图形将无法否则所绘制的图形将无法在窗体上显示。在窗体上显示。例:在例:在Form
23、_click事件中通过事件中通过Scale方法定义方法定义Form1新的坐标系。新的坐标系。Private Sub Form_click()Form1.ClsForm1.Scale(-200,250)-(300,-150)Form1.Line(-200,0)-(300,0)Form1.Line(0,250)-(0,-150)CurrentX=0:CurrentY=0:Print 0CurrentX=280:CurrentY=20:Print XCurrentX=10:CurrentY=240:Print YForm1.Line(0,0)-(200,180),QBColor(12)Form1.L
24、ine(0,0)-(-200,180),QBColor(14)End Sub例:用例:用LineLine方法在窗体上画出如图所示的随方法在窗体上画出如图所示的随机射线。机射线。Private Sub Form_Click()Dim i As Integer,x As Single,y As Single form1.Scale (-320,240)-(320,-240)For i=1 To 100 x=320*Rnd If Rnd 0.5 Then x=-x 另一象限另一象限 y=240*Rnd If Rnd 0.5 Then y=-y 另一象限另一象限 form1.Line(0,0)-(x,
25、y),QBColor(15*Rnd)Next iEnd Sub二、二、Circle方法方法 Circle方法用于画方法用于画圆、椭圆、圆弧和扇形圆、椭圆、圆弧和扇形,语法格式为:,语法格式为:对象对象.Circle Step(x,y),半径半径,颜色颜色,起始角,起始角,终止角终止角,长短轴比,长短轴比率率其中:其中:对象:对象:指窗体、图片框或打印机,默认为窗体;指窗体、图片框或打印机,默认为窗体;(x,y):指圆心坐标,若有指圆心坐标,若有Step则表示相对位置;则表示相对位置;起始角、终止角:起始角、终止角:圆弧和扇形通过的起始角和终止角。当起始角、终止角取值圆弧和扇形通过的起始角和终止
26、角。当起始角、终止角取值在在0360时,画出的是为圆弧,当在起始角、终止角取值前时,画出的是为圆弧,当在起始角、终止角取值前加负号加负号时,画出的时,画出的是是扇形扇形;长短轴比率:长短轴比率:椭圆大小通过此值控制。椭圆大小通过此值控制。默认值为默认值为1时,画出的是圆。时,画出的是圆。例:画出以下图中的圆、扇形、椭圆和圆弧。例:画出以下图中的圆、扇形、椭圆和圆弧。Private Sub Form_Click()Scale(100,100)-(0,0)Line(100,50)-(0,50)form1.Circle(80,50),5 form1.Circle(60,50),10,RGB(255,
27、0,0),-jtoh(30),-jtoh(90)form1.Circle(40,50),10,0.5 form1.Circle(20,50),15,jtoh(60),jtoh(150)End SubFunction jtoh(x)jtoh=x*3.1415926/180End Function三、三、Pset方法方法 Pset方法用于在窗体或图形框或打印机指定位置上方法用于在窗体或图形框或打印机指定位置上画点画点。采用此方法。采用此方法可以画出任意曲线。可以画出任意曲线。格式:格式:对象名对象名.Pset Step(x,y),颜色颜色其中其中:(x,y):为所画点的坐标为所画点的坐标例:绘制例
28、:绘制f(x)=sin(x)在在(-360,360)之间的图形。之间的图形。Private Sub Form_Click()Dim x As Single,y As Single,i As Single form1.Scale(-360,1)-(360,-1)form1.Line(0,1)-(0,-1)form1.Line(360,0)-(-360,0)For i=-360 To 360 Step 0.1 form1.PSet(i,Sin(i*3.1415926/180),vbred For j=1 To 10000 Next j Next iEnd Sub例:将上例稍加改变,可绘制如图所示的
29、阿基米德螺线例:将上例稍加改变,可绘制如图所示的阿基米德螺线Private Sub Form_Click()Dim x As Single,y As Single,i As Single form1.Scale(-15,15)-(15,-15)form1.Line(0,14)-(0,-14)form1.Line(14.5,0)-(-14.5,0)For i=0 To 12 Step 0.01 y=i*sin(i)x=i*cos(i)form1.PSet(x,y)For j=1 To 100000 Next j Next iEnd Sub四、四、Point方法方法 Point方法用于返回窗体或图
30、片框上方法用于返回窗体或图片框上指定点的指定点的RGB颜色(长整形值)颜色(长整形值)。格式:格式:对象对象.Point(x,y)如果如果(x,y)所指定的点在所指定的点在对象对象之外之外,返回值为,返回值为-1(True),否则返回的),否则返回的就是所扫描的点的颜色常量。就是所扫描的点的颜色常量。例:用例:用Point方法获取一个区域的信息并使用方法获取一个区域的信息并使用Pset方法进行仿真。方法进行仿真。设计思路:设计思路:在窗体上放置一个在窗体上放置一个Picture控件,在程序中设置窗体和控件,在程序中设置窗体和Picture控件各自控件各自的坐标系。用的坐标系。用Print方法在
31、方法在Picture控件上输出字符串或图形,然后用控件上输出字符串或图形,然后用Point方方法扫描法扫描Picture控件上的信息,根据返回值在窗体对应坐标位置上用控件上的信息,根据返回值在窗体对应坐标位置上用Pset方方法输出信息,达到仿真的目的。法输出信息,达到仿真的目的。Private Sub Form_Click()Dim i,j As Integer,mcolor As Long DrawWidth=2 Form1.Scale(0,0)-(100,100)Picture1.Scale(0,0)-(100,100)Picture1.Print 用用Point方法获取信息方法获取信息 For i=1 To 100 For j=1 To 100 mcolor=Picture1.Point(i,j)If mcolor -1 Then form1.PSet(i,j),mcolor Next j Next iEnd Sub小 结
限制150内