《高级语言程序设计教程——Visual Basic 6.0 中文版 教学课件 ppt 作者 张露4 第11章》由会员分享,可在线阅读,更多相关《高级语言程序设计教程——Visual Basic 6.0 中文版 教学课件 ppt 作者 张露4 第11章(22页珍藏版)》请在金锄头文库上搜索。
1、第11章 图形处理和多媒体编程,人民邮电出版社,21世纪高等学校计算机基础教育系列教材,第11章 图形与图像,坐标系统 Visual Basic中,每个对象都一个相对其容器的坐标,也就是说,每个对象都是存在于一个容器中的,例如,窗体的容器是整个屏幕,而窗体中的每个控件的容器就是这个窗体或者是窗体中的某个容器控件(如图形框等)。对于每一个容器来说,都需要有一个坐标系,在中学数学中讲过:构成一个坐标系需要有以下三个要素:坐标原点,坐标度量单位,坐标轴的长度与单位。坐标度量单位由容器的ScaleMode属性决定,ScaleMode属性设置如表所示,自定义坐标系统 用户可以通过以下两种方法来自行定义坐
2、标系统。其中方法一: 通过对象的ScaleTop,ScaleLeft,ScaleHeight,ScaleWidth四个属性来改变: (ScaleTop,ScaleLeft)的值用来设置控件对象的的左上角坐标,在默认情况下,这个属性的值均为0,当这两个属性的值发生改变后,坐标系的x轴和y轴都将平移形成新的坐标系。 重定义坐标系的第二种方法:采用Scale方法来设置坐标系。Scale方法是建立用户坐标系的一种方便的方法。语法结构如下: Object.Scale (x1, y1) - (x2, y2),第11章 图形与图像,绘图属性 当前坐标(CurrentX,CurrentY属性) 线条的粗细(D
3、rawWidth属性) 线条类型(DrawStyle属性) 填充类型(FillStyle属性) 使用颜色 使用系统中的常量来表示。 这种方法就是使用系统所提供的几种颜色常量,如VBRed,VBGreen等,这种方法表示的颜色种类比较少,所以不能满足Visual Basic绘图的需要。 使用RGB()函数 这是一种能够表示224种颜色方法,这个函数的使用语法如下:RGB(R,G,B) R,G,B三个参数的取值范围为0,255共有256个值。所以可以表示的颜色的种类为256*256*256种。但是计算机能够显示的颜色的种类要受到计算机的显示适配器的限制。 使用QBColor()函数 这种方法也只能
4、产生16种颜色,就是采用QuickBasic所提供的16种颜色,该函数的语法如下所示:QBColor(n) n的取值范围是:0,15,第11章 图形与图像,图形方法 Line 方法 Line 方法的作用是在对象上画直线和矩形。它的语法格式如下所示: Object.Line Step (x1, 1) Step (x2, y2), Color, BF 2.Circle 方法 在对象上画圆、椭圆或弧。这种方法的语法是: Object.Circle Step (X, Y), Radius, Color, Start, End, Aspect 3.PSet 方法 将对象上的点设置为指定颜色。这种方法的语
5、法为: Object.PSet Step (x, y), Color 4.Point 方法 按照长整数,返回在 Form 或 PictureBox 上所指定磅的红-绿-蓝 (RGB) 颜色。不支持命名参数。其语法如下: Object.Point(x, y) 5.PaintPicture 方法 用以在 Form, PictureBox 或 Printer 上绘制图形文件(.bmp、.wmf、.emf、.cur、.ico或 .dib)的内容。不支持命名参数。其语法格式如下: Object.PaintPicture picture, x1, y1, width1, height1, x2, y2,
6、width2, height2, opcode,设计步骤: 1 在窗体中创建两个大小相同的图片框(picturebox),分别命名为picture1 和picture2,其中picture1的图片picture属性要指定,缩小窗体的宽度,使得picture1不可见,然后创建三个按钮,分别为command1、command2和 command3,用来一百叶窗的形式显示图像的方法,可以实现横向和纵向的显示。 横向扫描图像 Private Sub Command1_Click() On Error Resume Next Picture2.Cls Dim cstep, i, cnum As Long
7、 Picture2.Width = Picture1.Width Picture1.Height = Picture1.Height cstep = 20 cnum = Picture1.ScaleWidth / cstep For i = 0 To cnum Step 2 Picture2.PaintPicture Picture1, i * cstep, 0, cstep, Picture1.Height, _ i * cstep, 0, cstep, Picture1.Height, VBSrcCopy For j = 0 To 50000 Next j Next i For i = 1
8、 To cnum Step 2 Picture2.PaintPicture Picture1, i * cstep, 0, cstep, Picture1.Height, _ i * cstep, 0, cstep, Picture1.Height, VBSrcCopy For j = 0 To 50000 Next j Next i End Sub,纵向扫描图像 Private Sub Command2_Click() On Error Resume Next Picture2.Cls Dim cstep, i, cnum As Long Picture2.Width = Picture1.
9、Width Picture1.Height = Picture1.Height cstep = 20 cnum = Picture1.ScaleHeight / cstep For i = 0 To cnum Step 2 Picture2.PaintPicture Picture1, 0, i * cstep, Picture1.Width, cstep, 0,_ i * cstep, Picture1.Width, cstep, VBSrcCopy For j = 0 To 50000 Next j Next i For i = 1 To cnum Step 2 Picture2.Pain
10、tPicture Picture1, 0, i * cstep, Picture1.Width, cstep, 0,_ i * cstep, Picture1.Width, cstep, VBSrcCopy For j = 0 To 50000 Next j Next i End Sub,百叶窗效果显示,PictureBox和ImageBox的使用 PictureBox控件和ImageBox控件都适用于一个特定的功能目的,ImageBox控件所需要的系统资源较少,但是它包含了PictureBox的可用的属性、方法和事件的子集。也就是说ImageBox控件比PictureBox控件在程序运行时要
11、显示的快一些。使用图形控件比使用图形方法而言要少许多的代码,Visual Basic提供的图片框和图像框可以显示的图形格式有以下几种:位图(*.bmp/*.dib)、图标(*.ico/*.cur)、图元文件(*.wmf/*.emf)、gif、jpeg(*.jpg)等格式的文件。也就是说,在我们所介绍的这两种控件中,我们都可以给它设置或者装入我们前面所介绍的各种格式的图形。在装入图形的时候有两种方法,第一种就是在设计时设置图片框或者图像框的picture属性,另一种方法是在运行时动态地加载图片文件,这里要用到一个方法,LoadPicture方法, LoadPicture方法的使用语法格式为: I
12、mage1.picture=LoadPicture(“c:Windowsforest.bmp”) Picure1.picture=LoadPicture(“c:Windowsforest.bmp”),绘制图形 图形控件 Shape控件 2. Line控件 图形控件与动画 曲柄滑块机构的演示。利用Timer控件来控制图形控件的转动,如图所示。,曲柄滑块机构 用户界面的设计,设计步骤如下: (1) 建立应用程序用户界面。 (2) 设置对象属性 (3) 编写程序代码。 在通用模块中声明符号常数及窗体级变量: Const pi = 3.14159 Dim X0 As Single, Y0 As Sin
13、gle, t As Integer 编写窗体的Load事件代码: Private Sub Form_Load() With Shape1 .Tag = .Width / 2 圆的半径 X0 = .Left + .Tag 圆心的x坐标 Y0 = .Top + .Tag 圆心的y坐标 End With,With Line1 连杆的长 .Tag = Sqr(.X1 .X2) 2 + (.Y1 .Y2) 2) End With End Sub 编写Timer1的Timer事件代码: Private Sub Timer1_Timer() t = t + 1 Shape3.Left = X0 + Shap
14、e1.Tag * Sin(pi * t / 30) 30 Shape3.Top = Y0 Shape1.Tag * Cos(pi * t / 30) + 30 Line1.X1 = Shape3.Left + 30 Line1.Y1 = Shape3.Top + 30 Line1.X2 = Shape3.Left + Sqr(Line1.Tag 2 (Shape3.Top Y0) 2) Line2.X1 = Line1.X1 Line2.Y1 = Line1.Y1 Shape2.Left = Line1.X2 End Sub,编写命令按钮Command1的Click事件代码: Private
15、Sub Command1_Click() If Command1.Caption = “暂停(&S)“ Then Command1.Caption = “继续(&C)“ Timer1.Enabled = False Else Command1.Caption = “暂停(&S)“ Timer1.Enabled = True End If End Sub,2. 输出图形和文本 利用图片框输出文本与图形,如图所示。,利用图片框输出文本与图形,设计步骤如下: (1) 首先按照表11-15所示的菜单项设计菜单。然后在窗体上增加一个图片框 (2) 编写程序代码。 编写窗体的Paint事件代码: Priv
16、ate Sub Form_Paint() Const pi = 3.14159 With Picture1 .Top = 0 .Left = 0 .Width = Me.ScaleWidth .Height = Me.ScaleHeight .ScaleMode = 6 oldx = .ScaleWidth / 2 oldy = .ScaleHeight / 2 .Cls 画坐标轴,Picture1.Line (oldx, 0)(oldx, .ScaleHeight), RGB(255, 0, 0) Picture1.Line (0, oldy)(.ScaleWidth, oldy), RGB(255, 0, 0) End With Picture1.CurrentX = oldx 4: Picture1.CurrentY = oldy + 0.5 Pic