第10章图形操作*VB为用户提供了简洁有效的图形图像功能。
除了窗体和控件的图形图像特征以外,还提供了一系列基本的图形处理函数、语句和方法,可直接在窗体上产生图形,处理图像,设置图形颜色以及控制其位置和外观。
本章主要介绍VB的坐标系统、自定义坐标系统;与图形操作有关的属性;PictureBox、Image、Line和Shape四种图形控件及应用;Line、Circle、Pset和Point四种图形方法及应用;与图形、图像处理有关的示例。
10.1 图形操作基础10.1.1 图形的坐标系统在VB中,每个对象定位于存放它的容器内,使用的是容器的坐标系统,对象的Left、Top属性指示了相对于容器左侧、顶部的距离。
例如,窗体处于屏幕(Screen)内,屏幕是窗体的容器。
在窗体内绘制控件,窗体就是容器。
如果在图片框内绘制图形或控件,该图片框就是容器。
对象位置及大小只能在容器界定的范围内变动。
当移动容器时,容器内的对象也随着一起移动。
而且与容器的相对位置保持不变。
每个容器都有一个坐标系统。
构成一个坐标系统需要三个要素:坐标原点、坐标度量单位、坐标轴的长度与方向。
容器的ScaleTop、ScaleLeft属性用于控制容器对象左边和顶端的坐标,这两个属性值指定了该容器对象坐标系统的坐标原点。
所有容器对象的ScaleTop、ScaleLeft值默认为0,坐标原点在容器的左上角。
容器的ScaleHeight、ScaleWidth属性确定对象内部垂直方向和水平方向的大小,这个数值与所用的度量单位有关。
度量单位不同,ScaleHeight、ScaleWidth属性值也不同。
属性ScaleMode决定对象坐标的度量单位,共有11种设置(常用8种),见表10-1。
表10-1 ScaleMode属性的设置-258-ScaleMode属性默认时为Twip(中文译为缇)。
每英寸为1440缇,20个缇为1磅(Point)。
这一度量单位规定的是对象打印时的大小,屏幕上的实际物理距离因显示器分辨率而异,普通VGA显示器在800*600模式下,最大窗体尺寸约为12000*8700缇。
改变容器对象的ScaleMode属性设置,不会改变容器的大小和它在屏幕上的位置。
只是改变了容器对象的度量单位。
VB会重新定义对象的ScaleHeight和ScaleWidth属性,以便使它们与新刻度保持一致。
窗体的Height属性包括了标题栏和水平边框宽度,同样Width属性值包括了重直边框宽度。
实际可用高度和宽度由ScaleHeight和ScaleWidth确定。
10.1.2 自定义坐标系统容器对象的默认坐标系统对绘制控件不会有什么影响,但对作图就有较大的影响。
因为平时我们习惯的坐标原点在中心(这是指数学上的),所以常需要对坐标原点进行重新设置。
Scale方法是建立用户坐标系统最方便的方法。
其语法是:[对象.]Scale [(xLeft,yTop)-(xRight,yBottom)]其中:(1) 对象可以是窗体、图片框或打印机。
如果省略对象名,则为带焦点的窗体。
(2) (xLeft,yTop)表示对象的左上角的坐标值,(xRight,yBottom)为对象的右下角的坐标值。
只要给定了对象的这两个点坐标值,VB会自动计算出ScaleTop、ScaleLeft、ScaleHeight和ScaleWidth的值:ScaleTop= yTopScaleLeft= xLeftScaleHeight= xRight- xLeftScaleWidth=yBottom- yTop思考:由于同一大小的窗体或图片框可以定义成不同的坐标系统,在不同的坐标系统下,一个点的大图10-1 自定义坐标系统小是否相同呢?例10-1 定义一个坐标系统,其坐标原点为(0,0),即原点在窗体的中央位置,如图10-1所示。
Private Sub Form_click()Me.Scale (-100, 100)-(100, -100)'定义坐标系统让窗体左上角坐标为(-100,100),右下角为(100,-100)Line (-100, 0)-(100, 0) '画横坐标Line (0, 100)-(0, -100) '画纵坐标End Sub代码写在窗体的Click事件中,运行后,单击窗体即可。
-259-10.2 与绘图有关的属性10.2.1 CurrentX和CurrentY窗体、图片框或打印机的CurrentX和CurrentY属性给出这些对象在绘图时的当前坐标。
这两个属性只能在程序中使用。
当坐标系确定后,常用这两个属性来指定一个坐标点,然后在这个点上输出内容。
当使用Cls方法后,CurrentX和CurrentY的值为坐标原点,不论这个坐标原点在对象中什么位置。
例10-2用Print方法在窗体上随机打印100个五角星“☆”。
代码如下:Private Sub Form_Click()For i = 1 To 100CurrentX = Form1.ScaleWidth * Rnd '根据窗体的有效宽度取横坐标 CurrentY = Form1.ScaleHeight * Rnd '根据窗体的有效高度取纵坐标 Print "☆"For j = 1 To 500000 '延时程序,循环次数可以自行调整Next jNext iEnd Sub程序运行效果如图10-2所示。
图10-2 当前坐标演示效果10.2.2 DrawWidth和DrawStyle窗体、图片框或打印机的DrawWidth属性给出在这些对象上所画线条的宽度或点的大小,DrawStyle属性给出在这些对象上所画线条的线形。
DrawWidth以像素为单位,最小为1,默认值也为1。
DrawStyle属性设置及意义如表10-2。
表10-2 DrawStyle属性设置常数设置值描述vbSolid0实线(缺省值)vbDash1虚线vbDot2点线vbDashDot3点划线-260-DrawWidth 设置为1,DrawStyle 产生的效果如前面表中的各设置值所述。
如果使用控件,则通过BorderWidth属性定义线的宽度或点的大小,通过BorderStyle 属性定义线型。
10.2.3 FillStyle和FillColor封闭图形的填充方式由FillStyle和FillColor这两个属性决定。
FillColor指定填充图案的颜色,默认与ForeColor相同。
FillStyle指定填充的图案,共有8种,见表10-3。
表10-3 FillStyle属性设置VB默认采用对象的前景色绘图,也可以通过以下颜色函数指定色彩。
1. Rgb函数Rgb函数通过红、绿、蓝三基色混合产生某种颜色,其语法为:Rgb(红,绿,蓝)其中:红、绿、蓝三基色的成份使用0~255之间的整数。
某种基色数值越大,这种颜色就越强。
如Rgb(255,0,0)就返回纯红色,而Rgb(255,255,255)返回白色,Rgb(0,0,0)返回黑色。
从理论上说,用Rgb函数可以产生255*255*255种颜色。
2. QBColor函数QBColor函数采用QuickBasic所使用的16种颜色,其语法格式为:QBColor(颜色码)颜色码的取值范围及含义见表10-4。
表10-4 颜色码与颜色对应表-261-10.2.4 AutoRedraw该属性对于使用各种图形方法很重要。
在窗体对象或图片框中,如果AutoRedraw属性值为True,则当对象调整大小或被其它对象遮盖后,原来所画的内容将被重新显示出来,反之,则不会显示出来。
AutoRedraw默认值为False。
当需要保存窗体对象或图片框上所绘制的图形时,其AutoRedraw属性值必须为True。
读者可以做一个简单的测试,在一个窗体上用Print方法输出一些内容,当AutoRedraw 值为False时,将这个窗体最小化后再恢复,窗体上的内容全部不见了。
当AutoRedraw值置为True时,无论这个窗体的大小如何变化,只要恢复到原来大小,原有的内容会全部重新显示出来。
10.3 图形控件为了在应用程序中创作图形,VB提供了4个基本控件以简化与图形有关的操作。
它们是PictureBox、Image、Line和Shape。
每一个控件都适用于一个特定的目的。
图形控件的优点是可使用较少的代码创建图形。
例如在窗体上放置一个圆,既可用Circle方法,也可用Shape控件,但用后者只需在设计时简单地把它拖到窗体上并设置特定的属性就可以了。
PictureBox和Image控件可以显示位图、图标、图元文件中的图形。
也可处理GIF和JPEG 格式的图像文件。
10.3.1 PictureBox控件PictureBox控件在前面章节作为其他控件的容器已经有了多次应用,该控件主要用来显示图片。
显示图片时,Picture属性设置为被显示的图片文件名(含路径名)。
在程序运行时可以使用LoadPicture()函数在图片框中装入图片。
PictureBox控件不提供滚动条,也不能伸展被装入的图片以适应控件尺寸,但可用PictureBox的AutoSize属性调整PictureBox的大小以适应图片尺寸。
当AutoSize设置为True时,PictureBox能自动调整大小与显示的图片匹配,当AutoSize设置为False时,PictureBox不能改变大小,当图片比控件大时,超过部分将被裁掉。
10.3.2 Image控件在窗体上使用Image控件的步骤与PictureBox相同,但前者比后者占用更少的内存,速度更快。
二者的区别是Image不能用作容器。
Image没有AutoSize属性,但有Stretch属性。
当Stretch设置为True时,加载的图-262-片可自动调整大小以适应Image的大小(有可能失真);当Stretch设置为False时,Image 会自动改变大小以适应加载的图片。
10.3.3 Line控件Line控件可以用来画线。
其主要属性是BorderWidth和BorderStyle,分别控制画线的宽度和线型,运行时的主要属性是所画线条的两个端点坐标x1,y1和x2,y2,分别控制线条的起点和终点。
10.3.4 Shape控件Shape控件可以用来画矩形、正方形、椭圆、圆、圆角矩形及圆角正方形。
当Shape控件放到窗体时显示为一个矩形,通过Shape属性可确定所需要的几何形状。
FillStyle属性为Shape指定填充图案,也可用FillColor属性为Shape着色。
10.3.5 图形文件的保存对于绘制或加载在窗体、Image和PictureBox内的图形,可以使用SavePicture命令把图形以文件的形式保存到磁盘中。