分享

VB图形和绘图操作

 nxhujiee 2023-01-02 发布于宁夏

VB图形和绘图操作

一、坐标:

X值:是沿X轴的位置,窗体中最左端是缺省位置0

Y值:是沿Y轴的位置,窗体中最上端是缺省位置0

X,Y的值可以小于0,也可以大于容器宽度或高度

二、坐标值的刻度:

缺省使用缇(Twip)为测量单位. 「Twip」中文译为"缇",是一种和屏幕无关的长度单位,目的是为了让应用程序元素输出到不同设备时都能保持一致的计算方式。打印机的一个点,即我们说的“磅”,相当于20个 Twips,一英吋相当于 1440个Twips, 一公分(厘米)则相当于567 Twips ,也就是说,如果屏幕上某个对象的长度是1440 Twip的话,将会印出一英吋来。

由于我们在屏幕上操作时会习惯用「像素」(也就是我们常说的屏幕分辨率DPI,系统可以设置各种DPI值),所以我们直接输入数字时必须再将「像素」换算成「Twip」。当DPI设置为96时(系统默认值),1个像素=(1/96)*1440=15 Twip;当DPI设置为120时,1个像素=(1/120)*1440=12 Twip。当DPI为96时,如果希望窗体的高是「400」像素,宽是「300」像素,属性的设定值就是: Height=400×15=6000 Twip,Width =300×15=4500 Twip.

在VisualBasic应用程序中,屏幕(Screen)是一个对象。其Width和Height属性以Twip为单位反映出屏幕的宽度和高度。而TwipsPerPixelX和TwipsPerPixelY这两个属性只与硬件有关,而与屏幕上可设定的分辨率无关。将Width除以TwipsPerPixelX可以计算出屏幕的水平分辨率(像素数),同样将Height除以TwipsPerPixelY也可以计算出屏幕的垂直分辨率。要想保持一个窗口或是控件的物理大小不变,只要计算出设计时的分辨率与实际运行时的分辨率的比值,然后根据这个比值来调节窗口和其中的控件的大小和相对位置,以及显示的字体尺寸,就可以保持同一应用程序的窗口在不同的系统下的物理外观(当然在不同尺寸的显示器上只能保持比例不变,物理大小还是不同的)。

ScaleMode属性,可以取以下常量值:

vbUser : 0 , 用 户 自 定 义 . 若 直 接 设 置 了 ScaleWidth , ScaleHeight,ScaleTop 或 ScaleLeft,则 ScaleMode 属性自动设为 0

vbTwips(缺省值):1,缇 (缺省值)

vbPoints: 2,磅, 72磅等于一英寸

vbPixels:3,像素.像素是监视器或打印机分辨率的最小单位, 每英寸里像素的数目由设备的分辨率决定

vbCharacters: 4, 字符 . 打印时 , 一个字符有 1/6 英寸高 , 1/12 英寸宽

vbInchs:5,英寸

vbMillimeters:6,毫米

vbCentimeters:7,厘米 : ,

三、颜色:

指定颜色有四种方式:

使用RGB函数,该函数有三个参数,分别取值0-255; 使

使用 QBColor 函数 , 该函数有一个参数 , 取值 0-15 , 16种

使用内部描述颜色的常量,如vbRed;

直接输入一种颜色值.

四、图形框控件(PictureBox):用于显示图片和图像, 或作为其它控件的容器.

Picture属性:1. 设计时在"属性窗口"中的Picture属性栏中,选择图片就可将图片加载到PictureBox控件中; 2. 从其它应用程序中复制图形后把它粘贴到PictureBox控件中. 3. 在程序中使用LoadPicture函数对Picture属性赋值,因在程序中Picture属性是对象类型,所以需要使用Set关键字, 如: Set Picture1.Picture = LoadPicture("d:\map\中国.jpg")

Set Picture2.Picture = LoadPicture  '清除图片

AutoSize属性: 使控件自动调节以适应图像大小。

PictureBox控件的高和宽同其它控件一样, Height和Width属性分别记录图形框控件所占空间的高度和宽,图片可能小于或超过控件的范围,要取得图片的真实大小,可以利用控件的对象来获取,Height和Width属性分别记录图片的高度和宽度,Picture1.Picture.Height可取得第一个图形框内图片的高度,但要注意的是ScaleWidth和ScaleHeight这两个属性的度量单位与控件的缺省度量单位不同.图形框内部绘图区的高和宽: ScaleWidth和ScaleHeight,它们代表的是图形框内部区域的水平或垂直度量单位,精确尺寸应略小于图形框的尺寸.

常用方法: 可以利用图形框的方法在图形框上绘制文字或图形,

Print输出文本,Circle, Line, Point, Pset

五、图像框控件(Image):也可以用于显示图片和图像, Image控件是轻量图形控件,需要较少的系统资源,显示速度较快.

Image控件只能用于显示图像,不能作为容器,加载速度快,缺省情况下, 控件总是根据图片大小自动调整其尺寸, ,而不管设计时所定义的控件尺寸,这样图片能保持其原始尺寸并得到完整的显示.

Stretch属性,设定图像是否自动调整大小适应控件属性

【例】编写图片显示程序,提供图片按照窗口高度、宽度和实际大小三种方式显示.

使用PictureBox作为容器, Image来显示图片,为Image不仅可以以原始尺寸显示图片,同时图片会自动调节适应Image1控件尺寸,当适应窗口高度时,将Image1控件的Height属性设置为Picture1控件的内部区域的高度,同时按照图片比例计算Width属性值,最后设置Stretch属性True,图片便自动适应窗口高度显示.

Private Sub optHeight_Click()

Image1.Width = Image1.Width*Picture1.ScaleHeight / Image1.Height

Image1.Height = Picture1.ScaleHeight

Image1.Stretch = True

End Sub

当适应窗口宽度时,将Image1控件的Width属性设置为Picture1控件的内部区域的宽度,同时按控件的内部区域的宽度照图片比例计算Height属性值,同样设置Stretch 属性为True,图片便自动适应窗口宽度显示. 代码如下:

Private Sub optWidth_Click()

Image1.Height= Image1.Height*Picture1.ScaleWidth / Image1.Width

Image1.Width = Picture1.ScaleWidth

Image1.Stretch = True

End Sub

选择实际大小时,只要将Image1控件的Stretch属性设置为False即可,代码如下:

Private Sub optActual_Click()

Image1.Stretch = False

End Sub

六、直线控件(Line):用于画线.

通过设置Line控件的属性定义直线的位置,长度,颜色和样式等外观.但是Line控件功能有限. 1,BorderStyle属性:提供六种直线样式: 透明 ,实线 ,虚线,点线,点划线,双点划线和内实线. 2,BorderColor属性:指定直线的颜色. 3,移动和调整线段长度 , 在运行时,不能用Move方法移动直线,只可更改控件的X1, X2, Y1和 Y2属性来移动控件或调整直线控件长度. X1和Y1属性设置直线控件左端点的坐标, X2和Y2属性设置直线控件右端点的坐标.

七、形状控件(Shape):用于构造简单的图形, 如:正 方形,圆形,圆角正方形等. 方形,圆形,圆角正方形等.

可用Shape控件在窗体、框架或图形框中创建下述预定义形状:矩形、 正方形、椭圆形、圆形、圆角矩形或圆角正方形。

1, Shape属性 : 指定形状,有六种预定义的形状.如: vbShapeRectangle , vbShapeSquare , vbShapeOval 等. 2,FillStyle 属性:提供了若干预定义的填充样式图案,如实线,水平线,十字线等.

3,FillColor属性:设置填充颜色.该属性不影响边框颜色(BorderColor)属性。

八、绘图方法

1)Cls:清除所有图形和调用Print方法所作的输出

2)PSet:设置屏幕指定位置像素的颜色

3)Line:画线,矩形,或填充框

4)Circle:画圆,椭圆,或圆弧

5)Point:返回指定点的颜色值

6)PaintPicture:在任意位置画出图形

使用Pset方法画点

[object.]PSet(x, y)[,color]

x和y参数为所画点的坐标是单精度参数,所以它们可以接受整数或分数的输入,可以适应不同的坐标系. color参数指定点的颜色,该参数可以使用任意一种方法来指定.如果没有指定color参数, PSet将像素设置为前景色( 对象的ForeColor属性).

PSet方法所画点的尺寸取决于对象的DrawWidth属性,缺省时DrawWidth为1,PSet就将一个像素的点设值为指定颜色.当DrawWidth大于1 ,使其中心位于指定坐标.这样只要DrawWidth足 大 ,就可以画各种颜色的实心圆了. Form1.DrawWidth= Rnd * 50+1

擦除点:擦除一点,只要把其颜色设置为背景色即可,如: 只要把其颜色设置为背景色即可,Form1.PSet (50, 75), Form1.BackColor

指定点的坐标

有两种方法来指定点的坐标:

1) 使用参数(x, y)指定点的坐标.如:PSet (20,20)

2) 当在参数(x, y)前面加上Step关键字后, (x, y)指定的就是相对当前坐标的偏移量.如:Pset Step (20,20),当前的坐标点就是调用图形方法或Print方法所画最后点的位置,该位置由对象的CurrentX和CurrentY属性保存,它们的初始值都为0.比如PSet可相对最后所画点的位置向下画点: For i=0 to 1000 PSet Step (1, 0) Next 因为是循环画点,所以上述代码可以得到一条水平线.

使用Line方法画线:Line方法可以画出一条直线,指定直线的起点,终点和颜色

[object.]Line [(x1, y1)]–(x2, y2)[,color]

第一对坐标为起点,第二对坐标为终点.

Line (0, 0)-(ScaleWidth, ScaleHeight)

Line (0, ScaleHeight)-(ScaleWidth, 0) ' 从左上角到右下角的对角线

其中第一对坐标(x1, y1)是可选的.如果省略,将把该对象的当前坐 标位置( CurrentX 和 CurrentY 属 性 )作为线的起点. Color如果省略,则使用对象的ForeColor属性为线的颜色.方法也支持使用关键字Step来指定相对位置.假设当前坐标为(500, 500):

Line -(1000, 0) '从(500, 500)到(1500, 500)的一条水平线

Line -Step(0, 1000) '从(1500, 500)到(1500, 1500)的一条垂直线 Line Step(0, 1000)-Step(200, 200) '从(1500, 2500)到(1700, 2700)的斜线

使用Line方法画矩形

一个很简单的画矩形的方法.当在Line方法中的最后添加"B"选项时,就会以指定的两点为矩形的对角点, 画一个矩形.如:

Line (500, 500)–(1500, 1000), vbRed, B

Line (500, 500)–Step(1000, 500), , B

注意:如果color参数省略的话,则在"B"之前要有两个逗点,参数值可以省略,但参数位置要保留.

填充矩形:使用Line方法还可以指定对矩形进行填充,有两种填充方式: 1) 颜色填充 Line (500, 500)–(1500, 1000), vbRed, BF 以上代码绘制一个红色的方块 2) 图案填充 FillStyle = 1 Line (500, 500)–(1500, 1000), vbRed, B 需要先指定FillStyle属性 , 即矩形内部图案填充方式

FillStyle属性的取值和填充效果

vbFSSolid:0,实线

vbFSTransparent(缺省值):1,透明

vbHorizontalLine:2,水平直线

vbVerticalLine:3,垂直直线

vbUpwardDiagonal:4,上斜对角线

vbDownwardDiagonal:5,下斜对角线

vbCross:6,十字线

vbDiagonalCross:7,交叉对角线

以上填充的图案以线条为主, 那么如何指定线条的颜色呢? 对象的FillColor属性充当此任.该属性缺省为黑色,所以如果不更改的话,填充的将都是黑色线条.

指定线型

DrawWidth设置为1时,可以设置以下线型

vbFSSolid(缺省值):0,实线

vbDash:1,虚线

vbDot:2,点线

vbDashDot:3,点划线

vbDashDotDot:4,双点划线

vbInvisible:5,无线

vbInsideSolid:6,内收实线 : ,

指定线宽

通过设置DrawWidth属性可以控制画出的线的宽度,值越大,线越宽【例】利用Line方法在窗口上随意画画,可以指定颜色和线宽.

1.鼠标按下并移动开始划线,鼠标抬起的时候不划,需要响应鼠标按下和移动两个事件.

2. 颜色可以利用通用对话框CommonDialog控件来选择

3. 线宽用滚动条设置.

设置线宽

Private Sub HScroll1_Change()

Form1.DrawWidth = HScroll1.Value

End Sub

设置线条颜色

Private Sub cmdColor_Click()

CommonDialog1.ShowColor

Form1.ForeColor=CommonDialog1.Color

End Sub

擦除窗体

Private Sub cmdClear_Click()

Me.Cls

End Sub

鼠标按下后,设置绘图起始坐标

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

CurrentX = X CurrentY = Y

End Sub

鼠标按下的同时并移动,绘制从(CurrentX,CurrentY)到(X,Y)的线条

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = 1 Then Line -(X, Y)

End Sub

使用Circle方法画圆:Circle方法用于画圆的语法是: [object.]Circle [Step](x, y), radius[, color]

其中(x, y)是圆心坐标,radius指定半径长度,和Line方法一样,在设置了对象的FillStyle和FillColor属性后, Circle方法就能画实心圆和其它填充效果的圆.例如画一个红色的实心圆: FillStyle = vbSolid FillColor = vbRed Circle (1000, 1000), 500, vbRed

【例】从窗口中心向外不停地画同心圆,直到充满.

Private Sub Timer1_Timer()

Static Radius Dim CX, CY, Limit

ScaleMode = vbPixels CX = ScaleWidth / 2

CY = ScaleHeight / 2

Limit = IIf(CX > CY, CY, CX)

Circle (CX, CY), Radius, RGB(Rnd * 255, Rnd * 255, Rnd * 255)

Radius = Radius + 1

If Radius > Limit Then

Form1.Cls

Radius = 0

End If

End Sub

Circle方法画椭圆

Circle [Step](x, y), radius, [color], [start], [end] [, aspect]

Circle [Step](x, y), radius, [color], , , aspect

圆的纵横轴比例不等于1,就是椭圆.其中参数start和end是可选的,可用于画圆弧,如果画椭圆这两个参数省略,但是逗号是不能省的,最后一个参数aspect是不能省略的, aspect参数指定了椭圆的垂直直径和水平直径的比例.该参数是正浮点数. 参数小于1时椭圆沿水平轴线拉长;参数大于1时则沿垂直轴线拉长.

在任意大小的窗口上画出最大的椭圆, 【例】在任意大小的窗口上画出最大的椭圆,并且椭圆随着窗口变化而变化. Private Sub Form_Resize()

Dim var1, var2

Form1.Cls

ScaleMode = vbPixels

var2 = ScaleHeight / ScaleWidth

If var2 < 1 Then

var1 = ScaleWidth / 2 - 1

Else

var1 = ScaleHeight / 2 - 1

End If

Circle (ScaleWidth / 2, ScaleHeight / 2), var1, vbRed, , , var2 End Sub

Circle方法画圆弧

圆弧就是截取圆或椭圆中指定的一部分.

 Circle [Step](x, y), radius, [color], [start], [end] [, aspect] start和 end参数指定的就是圆或椭圆中的两个角度, Circle方法按照逆时针顺序画出这两个角度之间的弧线.圆的角度取值范围是-2π—2π

Circle (1000, 1000), 800, vbRed, 0, Pi / 2

Circle (3000, 1000), 800, vbRed, *Pi, 3 * Pi / 2

Circle (1000, 1000), 800, vbRed, -2 * Pi, - Pi / 2

Circle (3000, 1000), 800, vbRed, -Pi , -3 * Pi / 2

使用PaintPicture方法显示图片

PaintPicture方法不仅可以显示图像,还可以完成各种图像效果,包括缩放,滚动,全景,平铺以及多种颜色效果.实际上 PaintPicture方法可以理解为从源控件到目标控件的图像的复制。 [object.]PaintPicture pic, destX, destY [, destWidth [, destHeight [, srcX [, srcY [, srcWidth [, srcHeight [, Opcode]]]]]]]

Object:指的是目标控件, 可以是窗体,图形框或Printer对象,这些控件都是图片显示的容器. pic参数:一个Picture对象,是要绘制到目标控件上的图形源,可以由窗体或PictureBox控件的Picture属性指定. destX和destY参数:图像出现在目标控件中的坐标位置.参数 destWidth和destHeight参数: 可选 ,图像在目标控件中的大小. srcX和srcY参数:可选,源控件图像要复制的区域的起始坐标. destWidth和destHeight参数: 可选 ,图像复制区的宽度和高度. Opcode参数:可选,定义当在目标控件上绘图时,在图像上执行的位操作.如反转等.

PaintPicture方法示例

【例】以不同效果将图片显示在窗体上.

整个图像以原始尺寸复制到窗体上

Private Sub Command1_Click()

Cls

PaintPicture Picture1.Picture, 0, 0

End Sub

复制原始图像的指定矩形区域到窗体上

Private Sub Command3_Click()

Cls

PaintPicture Picture1.Picture, 0, 0, , , 1000, 1000, 500, 500

End Sub

放大1倍显示整个图像

Private Sub Command2_Click()

Cls

PaintPicture Picture1.Picture, 0, 0, _ ScaleX(Picture1.Picture.Width, vbHimetric, vbTwips) * 2, _ ScaleY(Picture1.Picture.Height, vbHimetric, vbTwips) * 2

End Sub

整个图像以反转复制到窗体上

Private Sub Command4_Click()

Cls PaintPicture

Picture1.Picture, 0, 0, , , , , , , vbNotSrcCopy

End Sub

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多