您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 用Delphi开发基本绘图系统
※1※用Delphi开发基本绘图系统内容提要:本文以基本绘图系统开发为例,介绍了Delphi在图像处理方面的应用。本系统是按照软件工程开发所介绍的开发思想分析和设计出来的。通过本文的学习,除了要掌握图形控件PaintBox的使用外,还要掌握常规操作图形编程基础知识以及MainMenu与ActionList的使用。关键字:图形编程、MainMenu、ActionList引言:基本绘图系统,类似于Windows自带的画图工具。它可以实现一般的画图功能,包括画直线、曲线、矩形、椭圆形,还可以画逼近曲线、插值曲线,同时还可以进行图像填充、裁剪、变换、擦除等功能。所以本系统的功能还是比较齐全的,可以满足基本绘图的需要。正文:1需求分析软件开发的第一步是进行需求分析,下面就该系统的应用背景、使用到的基础知识和设计该系统的编程思想进行详细分析。1.1应用背景Windows操作系统的昀大优点就是提供了一个图形界面操作的方式,使得电脑的使用变得丰富多彩而且容易使用。在平时的工作中,常常需要绘制一些基本的图形。例如工程设计、程序设计等等。所以制作一个简单、快速功能基本齐全的绘图系统是比较实用的。与别的大型绘图系统相比,本系统的特点就是速度快,并且可以满足一般用户的一般需要。本文介绍的基本绘图系统,类似于Windows自带的画图工具。它可以实现一般的画图功能,包括画直线、曲线、矩形、椭圆形,还可以画逼近曲线、插值曲线,同时还可以进行图像填充、裁剪、变换、擦除等功能。本系统的编程特点就是利用了Delphi提供的大量的绘制基本图形的函数与控件。1.2基础知识在Delphi中,专门定义了一组对象和部件用以绘制图形,并能够完成一些简单的图像功能。利用这些对象、部件的方法,可以方便地绘制各种常用图形;通过设置它们的属性,能得到不同风格的图形。另外,通过对鼠标事件的定义,可以方便地设计图形绘制程序。1.常用图形对象绘制图形时一般要涉及到在什么地方绘图,使用何种颜色画和使用何种填充图案等问题。Delphi为用户提供了一个专供绘图的画布Canvas,每一个具有Canvas属性的对象,都可以作为绘制图形的环境。例如,对于TForm对象(通常所说的窗口),它也有Canvas属性,换句话说,可以直接在窗体绘制各种各样的图形。1)画布对象(TCanvasObject)TCanvas对象是一个用于绘图的表面,在这个区域上,程序可实现各种绘图功能,很多组件(如TIMage、TMemo、TPaintBox等)的Canvas属性就是TCanvas对象。为了在一个组件上创建图形,TCanvas类中的成员调用WindowsGDI函数。Canvas属性是对WindowsGDI的一个综合的、面向对象的封装。TCanvas的主要属性包括:Brush(画刷)、CopyMode(复制模式)、Font(字体)、Pen(画笔)、PenPos(画笔位置)、Pixels(像素)等。TCanvas的Brush、Pen、Font属性分别是TBrush、Tpen、TFont对象,它们用于定义图形绘制的风格。2)TColor类TColor用于定义一个对象的颜色。很多部件的颜色属性就是TColor类,在Graphics单元中※2※TColor定义如下:typeTColor=-$7FFFFFFF-1..$7FFFFFFF;这是一个32位二进制数。Graphic单元中还定义了一些常用的颜色常量,这些常量或直接映射成系统调色板中昀相近的颜色,或映射成Windows控制面板中颜色部分的系统视频颜色。Color属性可以设定画笔的颜色。在Delphi中提供了许多颜色的预定常数,这些预设颜色都以cl(cl代表color)为起始字元命名。例如clRed代表红色,clBlue代表蓝色,clGreen代表绿色等等。另外Delphi也将Windows的基本颜色以常数定义,如clWindow和clMenu分别代表Window和Menu的颜色。以下列出部分C++Builder定义的颜色常数,读者不必完全记住它们,只要有些印象即可,工作时可以直接使用在线帮助,不过记住一些常用的常数会提高程序写作的效率,颜色常数如表1所示。表1颜色常数说明颜色常数对应颜色颜色常数对应颜色clBlack黑色clMaroon茶色clGreen绿色clOlive橄榄绿clNavy海蓝色clPurple紫色clTeal青紫色clGray灰色clSilver银色clRed红色clime灰绿色clBlue蓝色clFuchsia紫红色clAqua淡绿青色clWhite白色clBackgroundWindow背景色clActiveCaption活动视窗的标题色clInactiveCaption非活动视窗的标题色clMenuMenu的颜色clWindowWindows的背景色clWindowFrameWindowFram的颜色clMenuTextMenu文字的颜色clWindowTextWindow内文字的颜色clCaptionText标题文字的颜色clActiveBorder活动视窗的边界颜色clInactiveBorder非活动视窗的边界颜色clAppWorkSpace视窗工作区域的颜色clHighlight高亮度Windows颜色clHightlightText被选取文字的颜色clBtnFaceButton颜色clBtnShadowButton影子颜色clGrayText灰色文字色clBtnTextButton内文字颜色clBtnHighlightButton高亮度颜色映射程序用4字节的二进制码来定义颜色,低3位字节代表RGB相应的颜色,如$00FF0000表示纯蓝,$0000FF00表示纯绿,$000000FF表示纯红,$00000000表示黑色,$00FFFFFF表示白色。如果昀高位字节是$00,则表示用系统调色板中昀相近的颜色;昀高位字节是$01,则表示用当前调色板中昀相近的颜色匹配;昀高位字节是$02,则用当前设备描述表中逻辑调色板的次相近颜色匹配。3)画刷对象(TBrushObject)Canvas的Brush属性是一个TBrush对象。画刷对象用以填充图形,如用画刷颜色或图案对矩形或椭圆进行填充。画刷的颜色定义在Color属性中。画刷还有一个Bitmap属性,该属性只能在运行时得到,画刷可使用位图填充图形以产生特殊效果。位图大小为八个像素点高,八个像素点宽。Style属性定义了画刷填充图形的风格。Style属性为枚举类型,共有十五种取值,分别代表不同的填充风格。其取值和含义如表2所示。表2Style属性的取值和含义取值含义BsSolid实心填充BsClear不填充BsHorizontal水平线填充BsVertical垂直线填充BsBDiagonal斜线填充※3※续表2取值含义BsFDialogonal反斜线填充BsCross十字线填充BsDiagCross交叉线填充bsDense1密集填充1bsDense2密集填充2bsDense3密集填充3bsDense4密集填充4bsDense5密集填充5bsDense6密集填充6bsDense7密集填充74)画笔对象(TPenObject)使用TPen类可以描述Windows的笔(Pen)属性,应用程序常用TPen对象在画布上绘制各种线段。所有和线条有关的绘图函数都会受TPen影响,如LineTo、Ellipse、Polygon、PolyLine、Rectangle等函数都使用画笔来画线,基本上可以将这些绘图工具归类为向量式的绘图工具,所有的向量式绘图工具都使用Pen来进行画线的动作。可以利用Canvas.Pen来存取Pen,借此修改Pen的性质,画笔的颜色在Color属性中定义,线段宽度在Width属性中定义,类型和模式则分别在Style和Mode属性中定义。Color属性控制线的颜色,可以采用颜色向量描述颜色,如clBlack(黑色)、clBlue(蓝色)和clGreen(绿色)等。Style属性确定线的式样,可以采用式样常量描述式样,如psSolid(实线)和psDash(短线)等。Style属性的具体取值和含义如表3所示。表3Style的取值和含义取值含义pSolid画实线段pSDash画由下划线组成的线段pSDot画由点组成的线段psDashDot画点划线psDashDotDot画双点划线psClear画看不见的线段psInsideFrame画边界的矩形线框Mode属性定义线段的颜色。可结合当前的颜色、屏幕颜色或它们的反转值,对线段的颜色重新定义,但不改变Color属性,详见表4。表4Mode的取值及含义取值像素颜色pmBlack黑色pmWhite白色pmNop不改变画布颜色pmCopy使用Color属性中的颜色pmNotCopy笔颜色的反转值pmMergePenNot笔的颜色与屏幕颜色反转值的结合pmMaskNotPen屏幕颜色与笔颜色pmMergeNotPen屏幕颜色与笔颜色反转值的结合pmMerge画笔颜色与画布背景颜色的结合pmNotMergePmMerge的反转值pmMask画笔的颜色与画布背景颜色的共用颜色的结合pmNotMaskPmMask的反转值pmXor画笔的颜色与画布背景颜色的非共用颜色的结合pmNotXorpmXor的反转值pmMaskPenNot画笔的颜色与画布背景颜色反转值的共用颜色的结合※4※续表4取值像素颜色pmNot画布背景颜色的反转值下面介绍一下Canvas的其他属性。ClipRect属性:TCanvas的ClipRect属性可以确定一个裁减区域的边界,使用ClipRect可以限制画布上的绘图区域,任何超过该区域的图形将被裁剪,也不会出现在画布上。CopyMode属性:确定一幅影像拷贝到画布上时相互作用的结果,当使用TCanvas的CopyRect方法,把一幅来自其他画布上的影像拷贝到画布上时,将使用其属性。Font属性:在画布上输出文本时将使用其字体属性,它是一个TFont对象,可以设置它的字型、字号和颜色等。其中它的样式(STyle)有下面几个常用的模式:(1)FsBold:粗体。(2)FsItalic:斜体。(3)FsUnderLine:下划线。(4)FsStrikeout:中划线。当然,这几个样式是可以组合的。PenPos属性:该属性可以确定画笔所在的位置,使用PenPos属性与使用MoveTo方法具有同样的效果。Pixels属性:该属性可以确定像素的颜色,一般来说,如果要设置某一位置的颜色,可以使用这一属性。5)画布对象的方法TCanvas对象的很多方法可完成常用的绘图功能,现将方法及功能说明如表5所示。表5TCanvas对象的方法方法名称调用方式及功能说明ArcArc(X1,Y1,X2,Y2,X3,Y3,X4,Y4:Integer)在椭圆上画一段弧,椭圆由(X1,Y1),(X2,Y2)两点所确定的椭圆所决定。弧的起点是椭圆圆周和椭圆中心与(X3,Y3)连线的交点。弧矩形终点是椭圆圆周和椭圆中心与(X4,Y4)连线的交点,以逆时针方向画弧ChordChord(X1,Y1,X2,Y2,X3,Y3,X4,Y4:Integer)连接椭圆上的两点,椭圆由(X1,Y1),(X2,Y3)两点所确定的矩形决定,(X3,Y3)是始点,(X4,Y4)是终点BrushcopyBrushcopY(constDest:TRect;Bitmap:TBitmap;constSoureTRect;Color:TColor)把位图的一部分复制到画布的某个矩形区域,并用画笔的当前颜色替换位图的颜色。参数Dest定义画布的一个矩形区域,该矩形用以填充位图,Bitmap定义位图;Source定义位图中的矩形区域,该区域上的位图将被复制;Color定义画笔中,用以替换位图的颜色CopyRectCopYRect(constDest:TRect;Canvas:TCanvas;constSource:TRect)从另一个画布对象上复制部分图像到该画布。Canvas表示源画布,Source是源
本文标题:用Delphi开发基本绘图系统
链接地址:https://www.777doc.com/doc-5356023 .html