版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
会计学1C图形程序设计基础实用图形图像处理中常常调用的名称空间:System:包括常用基础数据类型和24个子名称空间System.Drawing:提供了对GDI+基本图形功能的访问,主要有Graphics类、Bitmap类、从Brush类继承的类、Font类、Icon类、Image类、Pen类、Color类等System.Drawing.Drawing2D:提供了高级的二维和矢量图形功能。主要有梯度型画刷、Matrix类(用于定义几何变换)和GraphicsPath类等
System.Drawing.Imaging:提供了高级GDI+图像处理功能System.WinForms:提供许多与数据处理相关的结构的类
System.Timers:提供精确的计时操作System.Drawing.Text:提供了高级GDI+字体和文本排版功能第2页/共57页第1页/共57页1.2创建Graphics对象Graphics类包含在System.Drawing名称空间下。要进行图形处理,必须首先创建Graphics对象,然后才能利用它进行各种画图操作,即先创建Graphics对象再使用该对象的方法绘图、显示文本或处理图像。创建Graphics对象的形式有:1.在窗体或控件的Paint事件中直接引用Graphics对象每一个窗体或控件都有一个Paint事件,该事件的参数中包含了当前窗体或控件的Graphics对象,在为窗体或控件创建绘制代码时,一般使用此方法来获取对图形对象的引用:PrivatevoidForm_Paint(objectsender,System.Windows.Forms.PaintEventArgse){Graphicsg=e.Graphics;……}第3页/共57页第2页/共57页2.利用窗体或某个控件的CreateGraphics方法此方法所建对象是该控件或窗体的绘图区域,可把当前窗体的画刷、字体、颜色作为缺省值获取对Graphics对象的引用,注意这种对象只有在处理当前Windows窗口消息的过程中有效;如果想在已存在的窗体或控件上绘图,可以使用此方法。例如:
Graphicsg=this.CreatGraphics();3.从继承自图像的任何对象创建Graphics对象此方法在需要更改已存在的图像时十分有用,例如:
Bitmapbitmap=newBitmap(@”C:\test\a1.bmp”);Graphicsg=Graphics.FromImage(bitmap);第4页/共57页第3页/共57页在图形图像处理程序设计中,与Graphics对象一起使用的用户对象常有:Pen:用于绘制线条、勾勒形状轮廓等;Brush:用于填充图形区域;Font:提供有关在呈现文本时要使用什么形状的说明;Color:该结构表示要显示的不同颜色注意:由于图像对象非常占资源,所以在不用这些对象时要用Dispose方法及时释放资源第5页/共57页第4页/共57页附:颜色颜色是进行图形操作的基本要素。任何一种颜色都可以由四个分量决定,每个分量占据一个字节:
R:红色,取值范围0~255,255为饱和红色
G:绿色,取值范围0~255,255为饱和绿色
B:蓝色,取值范围0~255,255为饱和蓝色
A:Alpha值,即透明度。取值范围0~255,0为完全透明,255为完全不透明在System.Drawing名称空间下,有一个Color结构类型,包含系统已定义的颜色种类。可以使用下列方法创建颜色对象:⑴使用FromArgb指定任意颜色这个方法有两种常用的形式:第6页/共57页第5页/共57页第一种形式是直接指定三种颜色,方法原型为:publicstaticColorFromArgb(intred,intgreen,intblue)
三个参数分别表示R、G、B三色,Alpha值使用缺省值255,即完全不透明;例如:
Colorred=Color.FromArgb(255,0,0); Colorgreen=Color.FromArgb(0,255,0); Colorblue=Color.FromArgb(0,0,0xff);
其中,0xff为十六进制表示形式。第二种形式使用四个参数,格式为:publicstaticColorFromArgb(intalpha,intred,intgreen,intblue)四个参数分别表示透明度和R、G、B三色值。第7页/共57页第6页/共57页⑵使用系统预定义颜色在Color结构中已经预定义了141种颜色,可以直接使用,例如:
ColormyColor;myColor=Color.Red;myColor=Color.Aquamarine;myColor=Color.LightGoldenrodYellow;第8页/共57页第7页/共57页1.3创建画笔对象用Pen类创建画笔对象,画笔通常具有宽度、样式和颜色三种属性。1.Pen对象的创建:publicPen(Colorcolor);publicPen(Colorcolor,floatwidth);publicPen(Brushbrush);publicPen(Brushbrush,floatwidth);如:PenmyPen=newPen(Color.Black);PenmyPen=newPen(Color.Black,5);SolidBrushmyBrush=newSolidBrush(Color.Red);PenmyPen=newPen(myBrush);PenmyPen=newPen(myBrush,5);第9页/共57页第8页/共57页2.Pen对象的属性:画笔对象的属性用于返回或设置画笔对象的颜色、画线样式、画线始点及终点的样式等。常用属性如下:Color:DashCap:DashStyle:EndCap:PenType:StartCap:Width:例:第10页/共57页第9页/共57页1)新建一个Windows应用程序,适当加宽窗体宽度。然后切换到代码方式,添加名称空间引用:
usingSystem.Drawing.Drawing2D;
2)添加Form1_Paint事件代码。
privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; Penpen=newPen(Color.Blue,10.5f); g.DrawString("蓝色,宽度为10.5",this.Font,newSolidBrush(Color.Black),5,5); g.DrawLine(pen,newPoint(110,10),newPoint(380,10)); pen.Width=2;pen.Color=Color.Red; g.DrawString("红色,宽度为2",this.Font,newSolidBrush(Color.Black),5,25);第11页/共57页第10页/共57页g.DrawLine(pen,newPoint(110,30),newPoint(380,30));pen.StartCap=LineCap.Flat;pen.EndCap=LineCap.ArrowAnchor;pen.Width=9;g.DrawString("红色箭头线",this.Font,newSolidBrush(Color.Black),5,45);g.DrawLine(pen,newPoint(110,50),newPoint(380,50));pen.DashStyle=DashStyle.Custom;pen.DashPattern=newfloat[]{4,4};pen.Width=2;pen.EndCap=LineCap.NoAnchor;g.DrawString("自定义虚线",this.Font,newSolidBrush(Color.Black),5,65);g.DrawLine(pen,newPoint(110,70),newPoint(380,70));pen.DashStyle=DashStyle.Dot;g.DrawString("点划线",this.Font,newSolidBrush(Color.Black),5,85);g.DrawLine(pen,newPoint(110,90),newPoint(380,90)); }
第12页/共57页第11页/共57页运行结果
第13页/共57页第12页/共57页1.4创建画刷画刷是可与Graphics对象一起使用来创建实心形状和呈现文本的对象。可以用画刷填充各种图形形状,如矩形、椭圆、扇形、多边形和封闭路径等。几种不同类型的画刷:SolidBrush:画刷最简单的形式,用纯色进行绘制HatchBrush:类似于
SolidBrush,但是可以利用该类从大量预设的图案中选择绘制时要使用的图案,而不是纯色TextureBrush:使用纹理(如图像)进行绘制LinearGradientBrush:使用沿渐变混合的两种颜色进行绘制PathGradientBrush:基于编程者定义的唯一路径,使用复杂的混合色渐变进行绘制第14页/共57页第13页/共57页(1)使用SolidBrush类定义单色画笔
SolidBrush类用于定义单色画笔。该类只有一个构造函数,带有一个Color类型的参数。下面的示例说明如何在窗体上绘制一个纯红色的椭圆。该椭圆将符合为其提供的矩形的大小(此例中为表示整个窗体的ClientRectangle)。例:
privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse) { Graphicsg=e.Graphics; SolidBrushmyBrush=newSolidBrush(Color.Red); g.FillEllipse(myBrush,this.ClientRectangle); }
第15页/共57页第14页/共57页运行效果第16页/共57页第15页/共57页(2)使用HatchBrush类绘制简单图案
HatchBrush类用于从大量预设的图案中选择绘制时要使用的图案,而不是纯色。下面的示例说明如何创建一个HatchBrush,它使用90%的阴影,前景色与背景色的比例为90:100,并使用白色作为前景色,黑色作为背景色。例:
privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; HatchBrushaHatchBrush=new HatchBrush(HatchStyle.Percent90,Color.White,Color.Black); g.FillEllipse(aHatchBrush,this.ClientRectangle);}
第17页/共57页第16页/共57页运行效果:第18页/共57页第17页/共57页(3)使用TextureBrush类绘制复杂图案
TextureBrush类允许使用一幅图像作为填充的样式。该类提供了5个重载的构造函数,分别是:
PublicTextureBrush(Image)PublicTextureBrush(Image,Rectangle)PublicTextureBrush(Image,WrapMode)PublicTextureBrush(Image,Rectangle,ImageAttributes)PublicTextureBrush(Image,WrapMode,Rectangle)其中:Image:用于指定画笔的填充图案。
Rectangle:用于指定图像上用于画笔的矩形区域,其位置不能超越图像的范围。
WrapMode:WrapMode枚举成员用于指定如何排布图像,可以是
Clamp完全由绘制对象的边框决定
Tile平铺
TileFlipX水平方向翻转并平铺图像
TileFlipY垂直方向翻转并平铺图像
TileFlipXY水平和垂直方向翻转并平铺图像第19页/共57页第18页/共57页ImageAttributes:用于指定图像的附加特性参数。
TextureBrush类有三个属性:
Image:Image类型,与画笔关联的图像对象。
Transform:Matrix类型,画笔的变换矩阵。
WrapMode:WrapMode枚举成员,指定图像的排布方式。
下面的示例说明了如何创建一个TextureBrush,例子使用名为m23.jpg的图像进行绘制。
例:private
voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; TextureBrushmyBrush=newTextureBrush(newBitmap(@"e:\test\m23.jpg")); g.FillEllipse(myBrush,this.ClientRectangle);}
第20页/共57页第19页/共57页运行效果:第21页/共57页第20页/共57页(4)使用LinearGradientBrush类定义线性渐变这个类用于定义线性渐变画笔,可以是双色渐变,也可以是多色渐变。缺省情况下,渐变由起始颜色沿着水平方向平均过渡到终止颜色。要定义多色渐变,需要使用InterpolationColors属性。下面的示例说明如何由白色渐变到蓝色。例:privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics;LinearGradientBrushmyBrush=newLinearGradientBrush(
this.ClientRectangle,Color.White,Color.Blue,LinearGradientMode.Vertical);g.FillRectangle(myBrush,this.ClientRectangle);}第22页/共57页第21页/共57页
如果创建应用程序后向设计窗体上拖放一些控件,可以看到运行后该图就是一个漂亮的背景了。
第23页/共57页第22页/共57页(5)使用PathGradientBrush类实现彩色渐变在GDI+中,把一个或多个图形组成的形体称作路径。可以使用GraphicsPath类定义路径,使用PathGradientBrush类定义路径内部的渐变色画笔。渐变色从路径内部的中心点逐渐过渡到路径的外边界边缘。PathGradientBrush类有三种形式的构造函数,形式之一是:
publicPathGradientBrush(GraphicsPathpath)
其中,GraphicsPath定义画笔填充的区域。例,路径和路径画笔的使用:
usingSystem.Drawing.Drawing2D;
……
第24页/共57页第23页/共57页privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; PointcenterPoint=newPoint(150,100); intR=60;GraphicsPathpath=newGraphicsPath(); path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2*R,2*R); PathGradientBrushbrush=newPathGradientBrush(path);//指定路径中心点
brush.CenterPoint=centerPoint;
//指定路径中心点的颜色
brush.CenterColor=Color.Red;
//Color类型的数组指定与路径上每个顶点对应的颜色
brush.SurroundColors=newColor[]{Color.Plum};第25页/共57页第24页/共57页
g.FillEllipse(brush,centerPoint.X-R,centerPoint.Y-R,2*R,2*R); centerPoint=newPoint(350,100);R=20; path=newGraphicsPath(); path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2*R,2*R); path.AddEllipse(centerPoint.X-2*R,centerPoint.Y-2*R,4*R,4*R); path.AddEllipse(centerPoint.X-3*R,centerPoint.Y-3*R,6*R,6*R);brush=newPathGradientBrush(path); brush.CenterPoint=centerPoint; brush.CenterColor=Color.Red; brush.SurroundColors=newColor[]{Color.Black,Color.Blue,Color.Green}; g.FillPath(brush,path);}第26页/共57页第25页/共57页
在这个例子中,可以看到当使用FillPath()方法填充路径的时候,如果多个图形互相重叠,则重叠部分的数目为偶数时不会被填充,因此右图中间部分仍为背景色而不是蓝色。
第27页/共57页第26页/共57页附:平移、旋转与缩放
Graphics类提供了三种对图像进行几何变换的方法,它们是TranslateTransform()方法、RotateTransform()方法和ScaleTransform()方法,分别用于图形图像的平移、旋转和缩放(以坐标系原点为中心)。TranslateTransform()方法的形式为:
publicvoidTranslateTransform(floatdx,floatdy)
其中,dx表示平移的x分量,dy表示平移的y分量;RotateTransform()方法的形式为:
publicvoidRotateTransform(floatangle)
其中,angle表示旋转角度;ScaleTransform()方法的形式为:
publicvoidScaleTransform(floatsx,floatsy)
其中,sx表示x方向的缩放比例,sy表示y方向的缩放比例;
第28页/共57页第27页/共57页例:三种变换方法示例。
private
voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; g.FillEllipse(newSolidBrush(Color.FromArgb(80,Color.Red)),120,30,200,100);//椭圆透明度80% g.RotateTransform(30.0f);//顺时针旋转30度
g.FillEllipse(newSolidBrush(Color.FromArgb(80,Color.Blue)), 120,30,200,100);
//水平方向向右平移200个像素,垂直方向向上平移100个像素
g.TranslateTransform(200.0f,-100.0f); g.FillEllipse(newSolidBrush(Color.FromArgb(50,Color.Green)),120,30,200,100); g.ScaleTransform(0.5f,0.5f);//缩小到一半
g.FillEllipse(new SolidBrush(Color.FromArgb(100,Color.Red)),120,30,200,100);}
第29页/共57页第28页/共57页第30页/共57页第29页/共57页2基本图形的绘制1.画点C#采用Point结构和SetPixel()方法完成画点的功能;其中Point用于图形设计,SetPixel()用于图像处理Point原型:publicstructPoint;使用:publicPointp1=newPoint();每个点结构有x和y两个属性,表示横纵坐标,如:p1.x=30;p1.y=100;第31页/共57页第30页/共57页2.画直线1)DrawLine方法publicvoidDrawLine(Penpen,intx1,inty1,intx2,inty2);或publicvoidDrawLine(Penpen,Pointpt1,Pointpt2);如:Graphicsg=this.CreateGraphics(); Penp1=newPen(Color.Red,2); Pointpt1=newPoint(40,50); Pointpt2=newPoint(220,150); g.DrawLine(p1,10,20,40,50); g.DrawLine(p1,pt1,pt2);2)DrawLines方法publicvoidDrawLines(Penpen,Point[]pts);第32页/共57页第31页/共57页private
voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Penpen=newPen(Color.Black,3); Point[]points={newPoint(10,10),
newPoint(10,100),
newPoint(200,50),
newPoint(250,120) }; e.Graphics.DrawLines(pen,points);}效果
第33页/共57页第32页/共57页3.画椭圆1)publicvoidDrawEllipse(Penpen,intx,inty,intwidth,intheight)
其中x,y为椭圆外接矩形左上角的坐标,width定义椭圆的外接矩形的宽度,height定义椭圆外接矩形的高度。2)publicvoidDrawEllipse(Penpen,Rectanglerect)
其中rect为Rectangle结构,用于确定椭圆的外接矩形。第34页/共57页第33页/共57页4.绘制圆弧publicvoidDrawArc(Penpen,intx,inty,intwidth,intheight,intstartAngle,intsweepAngle)
其中x,y为椭圆外接矩形左上角的坐标,width定义椭圆。startAngle圆弧起点,sweepAngle顺时针画过的角度的外接矩形的宽度,height定义椭圆外接矩形的高度。例:
Graphicsg=this.CreateGraphics();Penpen=newPen(Color.Red,2);g.Clear(this.BackColor);g.DrawArc(pen,0,0,200,300,-60,180);第35页/共57页第34页/共57页5.DrawPie(扇形)publicvoidDrawPie(Penpen,intx,inty,intwidth,intheight,intstartAngle,intsweepAngle)各参数意义:例:
Graphicsg=this.CreateGraphics();Penpen=newPen(Color.Red,2);g.Clear(this.BackColor);g.DrawPie(pen,60,60,160,160,160,200);第36页/共57页第35页/共57页6.画矩形1)publicvoidDrawRectangle(Penpen,intx,inty,intwidth,intheight)参数含意:2)publicvoidDrawRectangle(Penpen,Rectanglerect)参数含意:例:private
voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; Penpen=newPen(Color.Black,3); Rectanglerect=newRectangle(30,30,200,100); e.Graphics.DrawRectangle(pen,rect);}第37页/共57页第36页/共57页3)publicvoidDrawRectangles(Penpen,Rectangle[]rects)该方法用于绘制多个矩形。例:private
voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; Penpen=newPen(Color.Black,3); Rectangle[]rects={
newRectangle(0,0,100,200),
newRectangle(100,200,250,50),
newRectangle(300,0,50,100) }; e.Graphics.DrawRectangles(pen,rects);}
第38页/共57页第37页/共57页7.Bezier每段贝塞尔曲线都需要四个点,第一个点是起始点,第四个点是终止点,第二个点和第三个点控制曲线的形状。使用DrawBezier()方法绘制一段贝塞尔曲线,使用DrawBeziers()方法绘制多段贝塞尔曲线。常用形式有:1)publicvoidDrawBezier(Penpen,floatx1,floaty1,floatx2,floaty2,floatx3,floaty3,floatx4,floaty4)2)publicvoidDrawBezier(Penpen,Pointpt1,Pointpt2,Pointpt3,Pointpt4)3)publicvoidDrawBeziers(Penpen,Point[]points)
其中points是Point结构的数组,第一段贝塞尔曲线从点数组中的第一个点到第四个点绘制而成。以后每段曲线只需要三个点:两个控制点和一个结束点。前一段曲线的结束点会自动用作后一段曲线的起始点。
第39页/共57页第38页/共57页例:private
voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse) { PenblackPen=newPen(Color.Black,3); Point[]bezierPoints= { newPoint(50,100),
newPoint(100,10),
newPoint(150,290),
newPoint(200,100),
newPoint(250,10),
newPoint(300,290),
newPoint(350,100) }; e.Graphics.DrawBeziers(blackPen,bezierPoints); }
第40页/共57页第39页/共57页8.DrawPolygon(多边形)publicvoidDrawPolygon(Penpen,Point[]points);publicvoidDrawPolygon(Penpen,PointF[]points);其中:PointF表示在二维平面中定义点的、浮点x和y坐标的有序对例:画一个四边形privatevoidbutton_Click(objectsender,System.EventArgse){Graphicsg=this.CreateGraphics();Penpen=newPen(Color.Red,2);g.Clear(this.BackColor);Point[]p1=newPoint[]{newPoint(10,120),newPoint(120,100),newPoint(300,180),newPoint(60,200)};g.DrawPolygon(pen,p1);}第41页/共57页第40页/共57页9.DrawClosedCurve方法这个方法用平滑的曲线将各节点连接起来,但会自动把首尾节点连接起来构成封闭曲线。publicvoidDrawClosedCurve(Penpen,Point[]pts);publicvoidDrawClosedCurve(Penpen,PointF[]pts);publicvoidDrawClosedCurve(Pen,Point[],float,FillMode);publicvoidDrawClosedCurve(Pen,PointF[],float,FillMode);
其中float型参数指定弯曲强度,该值范围为0.0f~1.0f,超出此范围会产生异常,当弯曲强度为零时,就是直线,默认张力为0.5。例:PenblackPen=newPen(Color.Black);Point[]p1=newPoint[]{ newPoint(10,120),newPoint(120,100),newPoint(300,180),newPoint(60,200) };g.DrawClosedCurve(blackPen,p1);第42页/共57页第41页/共57页10.DrawCurve方法(以四个点画出一条基本曲线)绘制经过一组指定的Point结构数组定义的曲线,最后一个点与第一个点间不画线。publicvoidDrawCurve(Penpen,Point[]pts);publicvoidDrawCurve(Penpen,PointF[]pts);publicvoidDrawCurve(Pen,Point[],float);publicvoidDrawCurve(Pen,PointF[],float);其中float参数代表曲线弯曲的强度。例:privatevoidbutton_Click(objectsender,System.EventArgse){Graphicsg=this.CreateGraphics();g.Clear(this.BackColor);PenblackPen=newPen(Color.Black,3);Point[]p1=newPoint[]{newPoint(10,120),newPoint(120,100),newPoint(300,180),newPoint(60,200)};g.DrawCurve(blackPen,p1);}第43页/共57页第42页/共57页例:绘制直线与平滑曲线private
voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ PenredPen=newPen(Color.Red,3); PengreenPen=newPen(Color.Green,3); Point[]curvePoints= {
newPoint(50,250),
newPoint(100,25),
newPoint(200,250),
newPoint(250,50),
newPoint(300,75),
newPoint(350,200),
newPoint(400,150) }; e.Graphics.DrawLines(redPen,curvePoints); e.Graphics.DrawCurve(greenPen,curvePoints);}
第44页/共57页第43页/共57页11.DrawPath方法路径通过组合直线、矩形和简单的曲线形成的,可通过Graphics类的DrawPath方法来绘制整个路径的各个对象。publicvoidDrawPath(Penpen,GraphicsPathpath);例:privatevoidbutton_Click(objectsender,System.EventArgse){ Graphicsg=this.CreateGraphics(); GraphicsPathgraphPath=newGraphicsPath(); graphPath.AddEllipse(0,0,200,100); graphPath.AddRectangle(newRectangle(100,80,200,100)); graphPath.AddBezier(30,60,70,60,50,30,100,10); PenblackPen=newPen(Color.Black,3); g.DrawPath(blackPen,graphPath);}第45页/共57页第44页/共57页12.FillEllipse该方法用于画一个填充椭圆,常用格式有:publicvoidFillEllipse(Brushbrush,intx,inty,intwidth,intheight);publicvoidFillEllipse(Brushbrush,RectangleFrect);参数意义:例:privatevoidbutton_Click(objectsender,System.EventArgse){ Graphicsg=this.CreateGraphics(); g.Clear(this.BackColor); Brushsp=newSolidBrush(Color.Red); g.FillEllipse(sp,80,90,200,100);}第46页/共57页第45页/共57页13.FillRectangle该方法用于画一个填充矩形,常用格式有:publicvoidFillRectangle(Brushbrush,intx,inty,intwidth,intheight);2)publicvoidFillRectangle(Brushbrush,Rectanglerect);参数意义:例:privatevoidbutton_Click(objectsender,System.EventArgse){ Graphicsg=this.CreateGraphics(); g.Clear(this.BackColor); Brushsp=newSolidBrush(Color.Red); g.FillRectangle(sp,80,90,200,100);}第47页/共57页第46页/共57页14.FillPie该方法用于画一个填充饼图,常用格式有:publicvoidFillPie(Brushbrush,intx,inty,intwidth,intheight,intstartAngle,intsweepAngle);2)publicvoidFillPie(Brushbrush,RectangleFrect,floatstartAngle,floatsweepAngle);参数意义:例:privatevoidbutton_Click(objectsender,System.EventArgse){ Graphicsg=this.CreateGraphics(); g.Clear(this.BackColor); Brushsp=newSolidBrush(Color.Red); g.FillPie(sp,80,90,200,100,-60,300);}第48页/共57页第47页/共57页3实用图形程序设计3.1设计内容--简单绘图板
设计一个简单绘图板,功能类似Windows画图工具。功能有:
能由鼠标控制绘制直线、矩形、椭圆,曲线,并能控制线条的颜色。
第49页/共57页第48页/共57页3.2设计过程3.2.1程序界面设计在Form中拖入pictureBox和button控件,并进行合理布局。3.2.2绘制直线A.直接绘制直线在“直线”按钮Click事件中输入代码:
Pointp1=newPoint(10,10); Pointp2=newPoint(50,50); Graphicsg=this.pictureBox1.CreateGraphics(); Penpen=newPen(Color.Black,1); g.DrawLine(pen,p1,p2);第50页/共57页第49页/共57页B.鼠标控制绘制直线
1.“直线”起点坐标获取:在控件pictureBox1中按下鼠标左键获取起点p1(X,Y),在pictureBox1_MouseDown事件中输入代码:
Pointp1=Point.Empty, p2=Point.Empty; p1.X=e.X; p1.Y=e.Y; p2.X=100; p2.Y=100; Graphicsg=this.pictureBox1.CreateGraphics(); Penpen=newPen(Color.Black,1); g.DrawLine(pen,p1,p2);第51页/共57页第50页/共57页2.“直线”终点坐标获取:在控件pictureBox1中松开鼠标左键获取终点p2(X,Y),在pictureBox1_MouseUp事件中输入代码:
Pointp1=Point.Empty, p2=Point.Empty; p1.X=100; p1.Y
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年双柱篮球架项目投资价值分析报告
- 2024至2030年儿童塑料椅项目投资价值分析报告
- 2024年菊花含片项目可行性研究报告
- 2024年工业用漆项目可行性研究报告
- 2024年中国机械离合电动机市场调查研究报告
- 专项安全技术方案
- 平安建设各项规章制度
- 盐田的构造与盐的开采考核试卷
- 工地意外死亡赔偿协议书
- 过桥-民间借款合同
- 土压平衡顶管施工工艺工法(给排水管道施工,附施工图)
- 高分子物理教案(Word)
- 盐碱地改良项目建议书范文
- 现代密码学清华大学杨波著部分习题答案
- 房地产组织架构图
- 停线管理规定
- 《我和小姐姐克拉拉》阅读题及答案(一)
- 大型展会对城市会展业发展影响文献综述会展专业
- 乡镇结核病防治工作职责
- 机组启动试运行工作报告
- 礼仪队工作计划三篇
评论
0/150
提交评论