多媒体软件设计技术 (陈启安)第6章_第1页
多媒体软件设计技术 (陈启安)第6章_第2页
多媒体软件设计技术 (陈启安)第6章_第3页
多媒体软件设计技术 (陈启安)第6章_第4页
多媒体软件设计技术 (陈启安)第6章_第5页
已阅读5页,还剩217页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第 6 章章 图形、图像程序设计技术图形、图像程序设计技术6.1 Visual Basic图形图像技术图形图像技术6.2 利用利用Visual Basic进行图像处理进行图像处理返回主目录第第6章章 图形、图形、 图像程序设计技术图像程序设计技术图形是多媒体程序中用得最多的媒体,对它研究得越深入,就会发现需要研究的东西越多,但是当看到自己设计的程序在屏幕上产生的栩栩如生的画面,就会觉得所做的一切是多么的有价值。图形文件包含的内容更广泛。一般的底图、2D图形、PhotoCD及扫描进来的资料都是以图形的方式进行储存。由第2章可知,图形文件的格式很多,VisualBasic在图形显示上支持Bitm

2、ap(位图)等图形文件格式,程序设计者不需要去研究图形文件的结构及编写显示图形的程序,直接使用第4章介绍的Picture、Image控件,就可显示出图形。虽然,VisualBasic支持Bitmap等图形文件格式,使程序设计者免去显示图形的烦恼,但是在对图形技术进行研究时,还会发现有许多新的难题待程序设计者去解决。这些技术是色彩(256色、全彩色)、调色板、存储器、分辨率、执行速度、图形特效及图形处理等,通过熟练掌握基本的图像技术,用户能以自己的方式组织视觉信息,得到像电影一样的效果。在这一章,我们将讨论VisualBasic和WindowsAPI函数如何一起工作来显示图像,进行图像处理。6.

3、1 Visual Basic图形图像技术图形图像技术6.1.1VB坐标系统及图形格式坐标系统及图形格式1. 坐标系统概述坐标系统概述在进行图形操作时,都要使用绘图区或容器的坐标系统。另外,如何用坐标系统定义窗体和控件在应用程序中的位置,也是很重要的。在VB中,坐标系统是一个二维网格,可定义屏幕上、窗体中或其他容器中(如:图片框或Printer对象)的位置。使用窗体中的坐标(x,y),可定义网格上的位置。其中x值是沿x轴的位置,最左端的值是0;y值是沿y轴的位置,最上端的值是0。该坐标系统如图6.1所示。图6.1窗体的坐标系统对于VisualBasic坐标系统,应注意以下几点:当移动或调整控件的

4、大小时,使用控件容器的坐标系统。如果直接在窗体上绘制对象时,窗体就是容器。如果在框架或图片框里绘制控件时,框架或控件是容器。所有的图形和Print方法,使用容器的坐标系统。例如,那些在图片框里绘制控件的语句,使用的是控件的坐标系统。一些用来调整窗体大小或移动窗体的语句,用缇来表示窗体的位置和大小。当创建用来调整窗体大小或移动窗体的代码时,应先检查Screen对象的Height属性和Width属性,以确保窗体在屏幕上大小合适。屏幕的左上角总是(0,0)。任何容器的缺省坐标系统,都是由容器的左上角(0,0)坐标开始。沿这些坐标轴定义位置的测量单位,统称为刻度。在VisualBasic中,坐标系统的

5、每个轴都有自己的刻度。坐标轴的方向、起点和坐标系统的刻度,都是可以改变的,但是,对现在来说,使用的是缺省系统。可用对象的刻度属性ScaleMode和Scale方法,设置特定对象(窗体或控件)的坐标系统为缺省的刻度、标准刻度或自定义刻度。所有VisualBasic的移动、调整大小和图形绘制语句,根据缺省规定,使用缇为单位。缇是打印机的一磅的1/20(1440缇=1英寸;567缇=1厘米)。这些测量值指示对象打印后的大小。屏幕上的物理实际距离根据监视器的大小变化。2. Visual Basic 的图形格式的图形格式VisualBasic可以支持的图形格式有:位图(.bmp)文件、设备独立位图(.d

6、ib)文件、图标(.ico)文件、光标(.cur)文件、元(.wmf)文件、增强的元文件(.emf)、GIF(.gif)文件以及JPEG(.jpg)文件。表6.1列出了在VB5.0中可以使用的图形文件格式。表表 6.1 VB5.0可以使用的图形文件可以使用的图形文件扩展名大小限制最大色数矢量或点阵透明效果存储格式WMF无全彩矢量有WMFEMF无全彩矢量有EMFGIF无256点阵有BMPJPG无全彩点阵无BMP6.1.2 PaintPicture方法和方法和BitBlt API函数函数PaintPicture是自VB4以后新提供的图形图像处理方法,它的基本功能是图像块传输,在以前的VB版本中要产

7、生块传输效果,需采用WindowsAPI中的块传输函数BitBlt。PaintPicture正是VB中用来代替BitBltAPI调用的简单而方便的方法。它能快速地将两幅位图进行合并;能将位图的全部或某一部分快速剪切并粘贴到其他地方;并能将位图自动延伸或压缩以适应新的环境;能在屏幕上不同位置之间、屏幕与内存之间传递位图;它采用32位三元光栅操作代码(RasterOp),在源位图、选定的刷子位图和目标位图之间进行颜色组合,生成目标位图中的最终颜色,它将13个常用的RasterOp操作以内部常量形式给出,不需任何声明。1. PaintPicture方法方法作用:在Form,PictureBox或Pr

8、inter上绘制图形文(.bmp、.wmf、.emf、.cur、.ico或.dib)的内容。语法:HTobject.PaintPicturepicture,x1,y1,width1,height1,x2,y2,width2,height2,opcode参数说明:Object可选的。一个对象表达式,其值可以为窗体、PictureBox控件或Printer。如果省略Object,带有焦点的Form对象缺省为Object。Picture必需的。要绘制到Object上的图形源。Form或PictureBox必须是Picture属性,Picture可以为BMP、Dib、Ico、Wmf、Emf等格式的图片

9、。x1,y1必需的(目标位图的参数)。均为单精度值,指定在Object上绘制Picture的目标坐标。Object的ScaleMode属性决定使用的度量单位。Width1可选的(目标位图的参数)。单精度值,指示Picture的目标宽度。Object的ScaleMode属性决定使用的度量单位。如果目标宽度比源宽度(Width2)大或小,将适当地拉伸或压缩Picture。如果该参数省略,则使用源宽度。Height1可选的(目标位图的参数)。单精度值,指示Picture的目标高度。Object的ScaleMode属性决定使用的度量单位。如果目标高度比源高度(Height2)大或小,将适当地拉伸或压缩

10、Picture。如果该参数省略,则使用源高度。x2,y2可选的(源位图的参数)。均为单精度值,指示Picture内剪贴区的坐标(x-轴和y-轴)。Object的ScaleMode属性决定使用的度量单位。如果该参数省略,则缺省为0。Width2可选的(源位图的参数)。单精度值,指示Picture内剪贴区的源宽度。Object的ScaleMode属性决定使用的度量单位。如果该参数省略,则使用整个源宽度。Height2可选的(源位图的参数)。单精度值,指示Picture内剪贴区的源高度。Object的ScaleMode属性决定使用的度量单位。如果该参数省略,则使用整个源高度。Opcode可选的。是长

11、型值或仅由位图使用的代码,该参数与BitBlt中dwRop参数含义相同。它表示源图与目标位图(或刷子位图)的组合关系,用来定义在将Picture绘制到Object上时对Picture执行的位操作(例如,vbMergeCopy或vbSrcAnd操作符)。VB为Opcode定义了13个内部常量:VbDstInvert(&H00550009):目标位图取反VbSrcCopy(&H00CC0020):源位图直接覆盖目标位图vbSrcAnd(&H008800C6):源位图与目标位图进行“与”操作vbSrcInvert(&H00660046):源位图与目标位图进行“异或”操

12、作vbSrcPaint(&H00EE0086):源位图与目标位图进行“或”操作vbNotSrcCopy(&H00330008):源位图取反vbSrcErase(&H00440328):目标位图取反,再与源位图进行“与”操作vbNotSrcErase(&H001100A6):源位图与目标位图进行“或非”操作vbMergePaint(&H00BB0226):源位图取反,再与目标位图进行“或”操作vbMergeCopy(&H00C000CA):合并模式和源位图vbPatCopy(&H00F00021L):将模式复制到目标位图vbPatInver

13、t(&H005A0049L):用Xor运算合并目标位图与模式vbPatPaint(&H00FB0A09L):用Or运算合并反转的源位图与模式。然后用Or运算合并上述结果与目标位图其中,与刷子位图有关的常量是vbMergeCopy、vbPatCopy、vbPatInvert和vbPatPaint,这13个位操作符常数的详细含义,请参阅VisualBasicHelp文件中的RasterOpConstants主题。在使用Opcode时有一些限制。例如,如果资源是图标或图元文件,则只能使用vbSrcCopy,而不能使用其他的Opcode。另外,Opcode用于将按位操作传递到位图。当传

14、递其他图像类型时将一个值给该参数会造成“无效过程调用或参数”错误,这是设计的原因。要避免这个错误,对于除位图外的图像,将Opcode参数置为空。注:通过使用负的目标高度值(Height1)和/或目标宽度值(Width1),可以水平或垂直翻转位图。可以省略任何多个可选的尾部的参数。如果省略了一个或多个可选尾部参数,则不能在指定的最后一个参数后面使用逗号。如果想指定某个可选参数,则必须先指定语法中出现在该参数前面的全部参数。巧用PainPicture方法,结合控件属性,可以方便地产生许多常见的图像切换效果,如我们在多媒体作品及电视中常见的图像旋转引入、翻转、飞入、滑入、弹出、淡入淡出、隐现等动画效

15、果。PainPicture方法实例:图像滑入(Wipe)效果的实现。在滑入效果中,新图像慢慢逐渐覆盖旧图像,就像在墙上展开一幅卷成筒状的画,图6.2所示。图6.2图像滑入效果的实现设计步骤如下:缺省窗体Form1。Form1上置PictureBox1、PictureBox2两大小相同的图片控件及Timer时钟控件。PictureBox1中安装源图,程序在PictureBox2中展开PictureBox1中的图像。编程。对象属性定义:BeginVB.FormForm1Caption=图像滑入(Wipe)效果演示ClientHeight=4440ClientLeft=1650ClientTop=1

16、590ClientWidth=8175LinkTopic=Form1ScaleHeight=296ScaleMode=3PixelScaleWidth=545BeginVB.TimerTimer1Interval=20Left=240Top=360EndBeginVB.PictureBoxPicture2Height=2895Left=4080ScaleHeight=189ScaleMode=3PixelScaleWidth=186TabIndex=1Top=1080Width=2850EndBeginVB.PictureBoxPicture1Height=2895Left=1200Pictu

17、re=Form1.frx:0000ScaleHeight=189ScaleMode=3PixelScaleWidth=186TabIndex=0Top=1080Width=2850EndBeginVB.LabelLabel2Alignment=2CenterCaption=Picture2BeginPropertyFontName=宋体Size=14.25Charset=134Weight=400Underline=0FalseItalic=0FalseStrikethrough=0FalseEndPropertyHeight=375Left=4560TabIndex=3Top=720Widt

18、h=1935EndBeginVB.LabelLabel1Alignment=2CenterCaption=Picture1BeginPropertyFontName=宋体Size=14.25Charset=134Weight=400Underline=0FalseItalic=0FalseStrikethrough=0FalseEndPropertyHeight=255Left=1680TabIndex=2Top=720Width=1935EndEnd程序代码如下:DimhAsIntegerDimtAsIntegerPrivateSubForm-Activate()Picture1.Scale

19、Mode=PixelPicture2.ScaleMode=Pixelh=0t=4EndSubPrivateSubTimer1-Timer()IfhendmaxThen若步进够大,画面都已显示,本张画结束切换jpgnum=jpgnum+1进到下一张画Ifjpgnum=jpgfilemaxThen若5张画已显示完则再从第一张开始jpgnum=0EndIfmovestep=0Picture1.Picture=LoadPicture(jpgfile(jpgnum)装入图像,见6.1.3节EndIfEndSub6.1.3LoadPicture函数和函数和SavePicture语句语句1. LoadPic

20、ture 函数函数作用:将图形载入到窗体的Picture属性、PictureBox控件或Image控件。语法:LoadPicture(filename,size,colordepth,x,y)参数说明:filename可选的。字符串表达式指定一个文件名。可以包括文件夹和驱动器。如果未指定文件名,LoadPicture清除图像或PictureBox控件。size可选变体。如果Filename是光标或图标文件,指定想要的图像大小。Size的设置值为vbLPSmall0系统小图标vbLPLarge1系统大图标,由视频驱动程序决定vbLPSmallShell2外壳小图标大小,由“控制面板”中的Disp

21、layProperties对话框中Appearance选项卡上的CaptionButtons的大小设置决定vbLPLargeShell3外壳大图标大小,由“控制面板”中的DisplayProperties对话框中Appearance选项卡上的图标大小设置决定vbLPCustom4自定义大小,由x和y参数提供值colordepth可选变体。如果Filename是一个光标或图标文件,指定想要的颜色深度。Colordepth的设置值为常量值描述vbLPDefault0如果使用指定文件,则为最佳可用匹配vbLPMonochrome12色vbLPVGAColor216色vbLPColor3256色x可选

22、变体,如果使用y,则必须使用。如果Filename是一个光标或图标文件,指定想要的宽度。在包含多个独立图像的文件中,如果那样大小的图像不能得到时,则使用可能的最好匹配。只有当Colordepth设为vbLPCustom时,才使用X和Y值。Foriconfiles255isthemaximumpossiblevaluey可选变体,如果使用x,则必须使用。如果Filename是一个光标或图标文件,指定想要的高度。在包含多个独立图像的文件中,如果那样大小的图像不能得到时,则使用可能的最好匹配。Foriconfiles255isthemaximumpossiblevalue注:赋值不带参数的LoadP

23、icture将清除窗体、图片框及图像控件中的图形。为了加载在PictureBox控件和Image控件中显示的图形或加载作为窗体背景的图形,必须将LoadPicture的返回值赋给要显示该图片的对象的Picture属性。例如:SetPicture=LoadPicture(PARTY.BMP)SetPicture1.Picture=LoadPicture(PARTY.BMP)如果要将图标赋予窗体,则要把LoadPicture函数的返回值赋给Form对象的Icon属性:SetForm1.Icon=LoadPicture(MYICON.ICO)图标也可以被赋予除Timer控件和Menu控件外的其他控件

24、的DragIcon属性,例如:SetCommand1.DragIcon=LoadPicture(MYICON.ICO)使用LoadPicture可将图形文件载入到系统剪贴板,如下所示:Clipboard.SetDataLoadPicture(PARTY.BMP)LoadPicture函数实例:本例使用LoadPicture函数将图片加载到窗体的PictureBox控件并从控件上清除掉该图片。程序运行后,单击窗体,即可看到所加载的图片。对象属性设置如下:BeginVB.FormForm1Caption=Form1ClientHeight=3540ClientLeft=1650ClientTop=

25、1590ClientWidth=5010LinkTopic=Form1ScaleHeight=3540ScaleWidth=5010BeginVB.PictureBoxPicture1Height=615Left=2160ScaleHeight=555ScaleWidth=675TabIndex=0Top=1200Width=735EndEnd程序代码如下:PrivateSubForm-Click()DimMsgAsString声明变量OnErrorResumeNext设置错误句柄Height=3990Width=4890设置高度和宽度Picture1.Picture=LoadPicture(

26、App.Path+arrow.CUR,vbLPCustom,vbLPColor,32,32)加载光标IfErrThenMsg=Couldntfindthe.curfile.MsgBoxMsg显示错误消息ExitSub如果发生错误则退出EndIfMsg=ChooseOKtoclearthebitmapfromtheform.MsgBoxMsgPicture1.Picture=LoadPicture()清除pictureboxEndSub 2. SavePicture 语句语句在用VB编制绘图程序时,有时需要将窗体或图片框上的绘图结果形成一个定制的图形文件保存起来,以便以后浏览或修改。这一功能可以

27、用VB本身带有的SavePicture语句来完成。SavePicture语句将窗体、图像控件或图片框中的图形图像保存到磁盘上的一个文件中,这些图像可以是使用画图方法(Line,Circle,Pset)设计出来的,也可以存储那些通过设置窗体或图片框的图片属性或者通过PaintPicture方法或LoadPicture函数载入的图像。这些载入的图像可以是BMP、JPG、ICO或WMF图形文件。下面介绍SavePicture语句的使用。作用:从对象或控件(如果有一个与其相关)的Picture或Image属性中将图形保存到文件中。语法:SavePicturepicture,stringexpressi

28、on参数说明:picture产生图形文件的PictureBox控件或Image控件。stringexpression欲保存的图形文件名。注:无论在设计时还是运行时图形从文件加载到对象的Picture属性,而且它是位图、图标、元文件或增强元文件,则图形将以原始文件同样的格式保存。如果它是GIF或JPEG文件,则将保存为位图文件。Image属性中的图形总是以位图的格式保存而不管其原始格式。下面举一个具体的例子来说明保存图像文件的过程。SavePicture语句实例:本例使用SavePicture语句保存画在Form对象的Picture属性中的图形。PrivateSubForm-Click()声明变

29、量DimCX,CY,Limit,RadiusasInteger,MsgasStringScaleMode=vbPixels设置比例模型为像素AutoRedraw=True打开AutoRedrawWidth=Height改变宽度以便和高度匹配CX=ScaleWidth/2设置X位置CY=ScaleHeight/2设置Y位置Limit=CX圆的尺寸限制ForRadius=0ToLimit设置半径Circle(CX,CY),Radius,RGB(Rnd*255,Rnd*255,Rnd*255)画圆方法,见6.1.4DoEvents转移到其他操作NextRadiusMsg=ChooseOKtosave

30、thegraphicsfromthisformMsg=Msg&toabitmapfile.MsgBoxMsgSavePictureImage,TEST.BMP将图片保存到文件EndSub最后有两点需要指出:在使用SavePicture语句之前,必须先将窗体或图片框的AutoRedraw属性设为True,否则保留的将是一张空图。使用Image属性保存的用画图命令(如Line,Cirele,Pset或Print)画出来的图形总是以BMP文件格式保存。但在程序设计时如果使用窗体或图片框的Picture属性载入或在程序运行时通过LoadPicture函数载入的图像,使用SavePicture语

31、句存储时,存储的文件格式同其载入前的文件格式一样(如ICO格式等)。 6.1.4Pset、 Circle、 Line绘图方法绘图方法除了图形控件(Line控件、Shape控件)之外,VisualBasic还提供有创建图形的一些方法。总结在下表中的这些图形方法,适用于窗体和图片框。方法描述Cls清除所有图形和Print输出PSet设置各个像素的颜色Point返回指定点的颜色值Line画线、矩形、或填充框Circle画圆、椭圆、或圆弧PaintPicture在任意位置画出图形注意Print方法也可认为是一种图形方法,因为它的输出也写在对象上,并像PSet、Circle和Line方法一样,也要以内存

32、图像的方式进行保存(如果AutoRedraw是打开的)。关于Print方法的详细信息,请参阅本章前边的“在窗体和图片框上显示文本”。6.1.4Pset、Circle、Line绘图方法在许多的工作需要使用图形控件的情况下,图形方法能工作得很好。例如,在图表中要创建网格线需要用到直线控件数组,而使用Line方法时却只需少量代码即可。当窗体改变大小时,跟踪数组中Line控件的位置,比起用Line方法简单地重新画线要麻烦得多。当需要可视的效果直接显示在窗体上时(如:要显示出有关对话的色条),可以为这种临时性效果编写几组代码行,而不是使用另一个控件。图形方法提供了一些在图形控件无效的可视效果。例如,使用

33、图形方法只能创建圆弧或画单个像素。用这些图形方法创建出的图形,显示在窗体上它们自己的那一层中。由于窗体中的这一层在所有其他控件之下,所以需要创建出现在应用程序中其他事物之下的图形时,这种方法就很好。用图形方法创建图形是在代码中进行的,这就意味着,必须运行应用程序才能看到图形方法的结果。因而,对于创建界面的简单设计元素来说,图形方法就不能代替图形控件的作用。设计时改变图形控件的外观,比修改并测试图形方法的代码容易。以下详细介绍PSet、Circle和Line方法。1. PSet 方法方法发作用作用:将对象上的点设置为指定颜色。 语法语法:object.PSetStep(x,y),color参数说

34、明参数说明:Object可选的。对象表达式,其值为“应用于”列表中的对象。如果Object省略,具有焦点的窗体作为Object。Step可选的。关键字,指定相对于由CurrentX和CurrentY属性提供的当前图形位置的坐标。(x,y)必需的。Single(单精度浮点数),被设置点的水平(x轴)和垂直(y轴)坐标。Color可选的。Long(长整型数),为该点指定的RGB颜色。如果它被省略,则使用当前的ForeColor属性值。可用RGB函数或QBColor函数指定颜色。注:所画点的尺寸取决于DrawWidth属性值。当DrawWidth为1,PSet将一个像素的点设置为指定颜色。当Draw

35、Width大于1,则点的中心位于指定坐标。画点的方法取决于DrawMode和DrawStyle属性值。执行PSet时,CurrentX和CurrentY属性被设置为参数指定的点。想用PSet方法清除单一像素,规定该像素的坐标,并用BackColor属性设置作为Color参数。PSet方法实例:这个实例用PSet方法在窗体上画五彩碎纸。SubForm-Click()DimCX,CY,Msg,XPos,YPosDeclarevariables.ScaleMode=3设置ScaleMode为像素DrawWidth=5设置DrawWidth.ForeColor=QBColor(4)设置前景为红色Fon

36、tSize=24设置点的大小CX=ScaleWidth/2得到水平中点CY=ScaleHeight/2得到垂直中点Cls清窗体Msg=HappyNewYear!CurrentX=CX-TextWidth(Msg)/2水平位置CurrentY=CY-TextHeight(Msg)垂直位置PrintMsg打印消息DoXPos=Rnd*ScaleWidth得到水平位置YPos=Rnd*ScaleHeight得到垂直位置PSet(XPos,YPos),QBColor(Rnd*15)画五彩碎纸DoEvents进行Loop其他处理EndSub 2. Circle 方法方法作用:在对象上画圆、椭圆或弧。语法

37、:Object.CircleStep(x,y),radius,color,start,end,aspect参数说明:Object可选的。对象表达式,其值为“应用于”列表中的对象。如果Object省略,具有焦点的窗体作为Object。Step可选的。关键字,指定圆、椭圆或弧的中心,它们相对于当前Object的CurrentX和CurrentY属性提供的坐标。(x,y)必需的。Single(单精度浮点数),圆、椭圆或弧的中心坐标。Object的ScaleMode属性决定了使用的度量单位。Radius必需的。Single(单精度浮点数),圆、椭圆或弧的半径。Object的ScaleMode属性决定了

38、使用的度量单位。Color可选的。Long(长整型数),圆的轮廓的RGB颜色。如果它被省略,则使用ForeColor属性值。可用RGB函数或QBColor函数指定颜色。Start,End可选的。Single(单精度浮点数),当弧、或部分圆或椭圆画完以后,Start和End指定(以弧度为单位)弧的起点和终点位置。其范围从-2pi到2pi。起点的缺省值是0;终点的缺省值是2*pi。Aspect可选的。Single(单精度浮点数),圆的纵横尺寸比。缺省值为1.0,表示在屏幕上产生一个标准圆(非椭圆)。注:想要填充圆,使用圆或椭圆所属对象的FillColor和FillStyle属性。只有封闭的图形才能

39、填充。封闭图形包括圆、椭圆或扇形。画部分圆或椭圆时,如果Start为负,Circle画一半径到Start,并将角度处理为正的;如果End为负,Circle画一半径到End,并将角度处理为正的。Circle方法总是逆时针(正)方向绘图。画圆、椭圆或弧时线段的粗细取决于DrawWidth属性值。在背景上画圆的方法取决于DrawMode和DrawStyle属性值。画角度为0的扇形时,要画出一条半径(向右画一水平线段),这时给Start规定一很小的负值,不要给0。可以省略语法中间的某个参数,但不能省略分隔参数的逗号。您指定的最后一个参数后面的逗号是可以省略的。Circle执行时,CurrentX和Cu

40、rrentY属性被参数设置为中心点。Circle方法实例:这个实例用Circle方法在窗体中央画许多同心圆。SubForm-Click()DimCX,CY,Radius,LimitDeclarevariableScaleMode=3以像素为单位CX=ScaleWidth/2X位置CY=ScaleHeight/2Y位置IfCXCYThenLimit=CYElseLimit=CXForRadius=0ToLimit半径Circle(CX,CY),Radius,RGB(Rnd*255,Rnd*255,Rnd*255)NextRadiusEndSub3. Line 方法方法作用作用:在对象上画直线和矩

41、形。 语法语法:object.LineStep(x1,1)Step(x2,y2),color,BF参数说明参数说明:Object可选的。对象表达式,其值为“应用于”列表中的对象。如果Object省略,具有焦点的窗体作为Object。Step可选的。关键字,指定起点坐标,它们相对于由CurrentX和CurrentY属性提供的当前图形位置。(x1,y1)可选的。Single(单精度浮点数),直线或矩形的起点坐标。ScaleMode属性决定了使用的度量单位。如果省略,线起始于由CurrentX和CurrentY指示的位置。Step可选的。关键字,指定相对于线的起点的终点坐标。(x2,y2)必需的。

42、Single(单精度浮点数),直线或矩形的终点坐标。Color可选的。Long(长整型数),画线时用的RGB颜色。如果它被省略,则使用ForeColor属性值。可用RGB函数或QBColor函数指定颜色。B可选的。如果包括,则利用对角坐标画出矩形。F可选的。如果使用了B选项,则F选项规定矩形以矩形边框的颜色填充。不能不用B而用F。如果不用F只用B,则矩形用当前的FillColor和FillStyle填充。FillStyle的缺省值为Transparent。注:画联结的线时,前一条线的终点就是后一条线的起点。线的宽度取决于DrawWidth属性值。在背景上画线和矩形的方法取决于DrawMode和

43、DrawStyle属性值。执行Line方法时,CurrentX和CurrentY属性被参数设置为终点。绘图方法程序实例:绘制任意曲线的真彩色画板在绘图软件(如MicrosoftPainter、AdobePhotoshop等)中,画板通常具有在规定区域内,以任意的颜色,绘制任意曲线及一些基本图形(直线、矩形、圆等)的功能。下面介绍的“真彩色画板”(如图6.4所示)可以在一个画图区域内,以任意的颜色(16777216种颜色),绘制任何曲线。程序中用前面介绍的Line绘图方法与鼠标的MouseDown及MouseMove事件,并使用RGB(Red,Green,Blue)函数选取画笔颜色,实现具体的绘

44、图操作。(1)窗体中的控件说明。在“真彩色画板”程序用户界面中,按图6.4的布局使用了以下17个控件:二个图片框(Picture1、Picture2):Picture1用做绘图区域,即图6.4中的大块白色区域;Picture2用来放置窗体右上角的软件标志图片。四个命令按钮:“打开”(Command1)、“保存”(Command2)、“清屏”(Command3)、“退出”(Command4)。图6.4“真彩色画板”用户界面三个水平滚动条(Hscroll1、Hscroll2、Hscroll3):分别用于设置RGB函数的三个分量Red(红色)、Green(绿色)和Blue(蓝色)的值,各分量取值范围

45、均为0255,共可合成25625625616777216种颜色,即所谓的“真彩色”。七个标签:分别用于显示标题“红色通道”(Label1r)、“绿色通道”(Label1g)、“蓝色通道”(Label1b)、RGB函数返回的合成色“画笔颜色”(Label2),以及标题“红色”(Label3)、“绿色”(Label4)、“蓝色”(Label5)。一个帧控件(Frame1):用做绘图区域边框。各对象属性设置如下:BeginVB.FormForm1BackColor=&H80000001&Caption=简单的真彩色画板ClientHeight=7425ClientLeft=1665C

46、lientTop=1950ClientWidth=9960LinkTopic=Form1ScaleHeight=7425ScaleWidth=9960BeginVB.PictureBoxPicture2Appearance=0FlatBackColor=&H80000005&ForeColor=&H80000008&Height=1785Left=8130Picture=Form1.frx:0000ScaleHeight=1755ScaleWidth=1755TabIndex=15Top=300Width=1785EndBeginVB.HScrollBarHSc

47、roll3Height=375Left=8250Max=255TabIndex=7Top=5820Width=1575EndBeginVB.HScrollBarHScroll2Height=375Left=8250Max=255TabIndex=6Top=5100Width=1575EndBeginVB.HScrollBarHScroll1Height=375Left=8250Max=255TabIndex=5Top=4380Width=1575EndBeginVB.CommandButtonCommand4Caption=退出BeginPropertyFontName=宋体Size=12Ch

48、arset=134Weight=400Underline=0FalseItalic=0FalseStrikethrough=0FalseEndPropertyHeight=495Left=6210TabIndex=4Top=6780Width=1455EndBeginVB.CommandButtonCommand3Caption=清屏BeginPropertyFontName=宋体Size=12Charset=134Weight=400Underline=0FalseItalic=0FalseStrikethrough=0FalseEndPropertyHeight=495Left=4170T

49、abIndex=3Top=6780Width=1455EndBeginVB.CommandButtonCommand2Caption=保存BeginPropertyFontName=宋体Size=12Charset=134Weight=400Underline=0FalseItalic=0FalseStrikethrough=0FalseEndPropertyHeight=495Left=2130TabIndex=2Top=6780Width=1455EndBeginVB.CommandButtonCommand1Caption=打开BeginPropertyFontName=宋体Size=1

50、2Charset=134Weight=400Underline=0FalseItalic=0FalseStrikethrough=0FalseEndPropertyHeight=495Left=90TabIndex=1Top=6780Width=1455EndBeginVB.PictureBoxPicture1AutoRedraw=-1TrueBackColor=&H80000009&Height=6015Left=330ScaleHeight=5955ScaleWidth=7035TabIndex=0Top=300Width=7095EndBeginVB.FrameFrame

51、1BackColor=&H80000004&Caption=绘图板Height=6360Left=180TabIndex=16Top=135Width=7440EndBeginVB.LabelLabel1bAppearance=0FlatBackColor=&H80000005&BorderStyle=1FixedSingleCaption=蓝色通道ForeColor=&H80000008&Height=495Left=9330TabIndex=14Top=2340Width=495EndBeginVB.LabelLabel1gAppearanc

52、e=0FlatBackColor=&H80000005&BorderStyle=1FixedSingleCaption=绿色通道ForeColor=&H80000008&Height=495Left=8790TabIndex=13Top=2340Width=495EndBeginVB.LabelLabel5Caption=蓝色BeginPropertyFontName=宋体Size=12Charset=134Weight=700Underline=0FalseItalic=0FalseStrikethrough=0FalseEndPropertyForeColo

53、r=&H00FF0000&Height=255Left=7650TabIndex=12Top=5865Width=570EndBeginVB.LabelLabel4Caption=绿色BeginPropertyFontName=宋体Size=12Charset=134Weight=700Underline=0FalseItalic=0FalseStrikethrough=0FalseEndPropertyForeColor=&H0000FF00&Height=255Left=7650TabIndex=11Top=5145Width=570EndBeginVB.L

54、abelLabel3Alignment=2CenterCaption=红色BeginPropertyFontName=宋体Size=12Charset=134Weight=700Underline=0FalseItalic=0FalseStrikethrough=0FalseEndPropertyForeColor=&H000000FF&Height=255Left=7650TabIndex=10Top=4425Width=570EndBeginVB.LabelLabel2Appearance=0FlatBackColor=&H80000005&BorderSt

55、yle=1FixedSingleCaption=画笔颜色ForeColor=&H80000008&Height=1335Left=8250TabIndex=9Top=2940Width=1575EndBeginVB.LabelLabel1rAppearance=0FlatBackColor=&H80000005&BorderStyle=1FixedSingleCaption=红色通道ForeColor=&H80000008&Height=495Left=8250TabIndex=8Top=2340Width=495EndEnd(2)程序代码如下。

56、在窗体Form1的声明段(即通用声明中)声明以下变量DimpaintnowAsBooleanDimstartXAsSingle,startYAsSingleDimredAsInteger,greenAsInteger,blueAsIntegerPrivateSubCommand1-Click()变量file-name用于保存用户输入的要打开的文件的文件名Dimfile-nameAsStringfile-name=InputBox(请输入路径文件名:,打开文件)如果文件不存在,则显示文件未找到的对话框;否则将指定的图形文件载入赋给图片框的Picture属性(即在图片框中显示打开的图形文件),并设

57、置保存命令按钮获得焦点IfDir(file-name)=Thenans$=MsgBox(文件没找到,0,出错信息)ElsePicture1.Picture=LoadPicture(file-name)Command1.SetFocusEndIfEndSubPrivateSubCommand2-Click()将用户在对话框中输入的文件名保存到变量file-name中,并将图片框中的图形存入以该文件名为名字的磁盘文件(如果已存在同名的磁盘文件则重写该文件;否则建立新文件),同时设置命令按钮退出获得焦点file-name=InputBox(请输入路径、文件名:,保存文件)SavePicturePic

58、ture1.Image,file-nameCommand4.SetFocusEndSubPrivateSubCommand3-Click()用不带参数的LoadPicture来清除图片框中的图形Picture1.Picture=LoadPictureEndSubPrivateSubCommand4-Click()EndEndSubPrivateSubForm-Load()设置窗体显示在屏幕中部Left=(Screen.Width-Width)/2Top=(Screen.Height-Height)/2将变量paintnow赋值为False(变量paintnow的值为True时,在图片框中移动鼠

59、标即开始画图;值为False时不画图)paintnow=False设置显示合成色的标签Label2的背景色为黑色(即缺省的画图颜色为黑色)=RGB(0,0,0)EndSubLabel2.BackColor=RGB(0,0,0)Label1r.BackColor=RGB(0,0,0)Label1g.BackColor=RGB(0,0,0)Label1b.BackColorPrivateSubForm-Activate()当窗体Form1成为活动窗体时,设置命令按钮打开获得焦点Command1.SetFocusEndSubPrivateSubHScroll1-Scroll()将调整红色成分的滚动条

60、HScroll1的值赋给RGB函数的第一个参数redred=HScroll1.Value设置显示合成色的标签Label2的背景色为RGB函数的返回值(函数值)Label1r.BackColor=RGB(red,0,0)Label2.BackColor=RGB(red,green,blue)EndSubPrivateSubHScroll2-Scroll()green=HScroll2.ValueLabel1g.BackColor=RGB(0,green,0)Label2.BackColor=RGB(red,green,blue)EndSubPrivateSubHScroll3-Scroll()blue=HScroll3.ValueLabel1b.BackColor=RGB(0,0,blue)Label2.BackColor=RGB(red,green,blue)EndSubPrivateSubPicture1-MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)当在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论