nullVisual C#.NET
程序设计
教程
人力资源管理pdf成真迷上我教程下载西门子数控教程protel99se入门教程fi6130z安装使用教程
Visual C#.NET
程序设计教程第六章 GDI+编程本章主要内容本章主要内容6.1 GDI+与绘图命名空间
6.2 创建Graphics对象
6.3 Pen对象
6.4 Brush对象
6.5 Font对象
6.6 常用图形的绘制方法
6.7 典型实例 6.1 GDI+与绘图命名空间6.1 GDI+与绘图命名空间1、GDI+的基本概念
GDI:即Graphics Device Interface,图形设备接口
初级的GDI绘图机制很复杂,首先获得一个显示设备环境(DC)、通过DC才能绘图、还要考虑显示模式、重绘等等。
GDI+以图形图像作为对象,可在Windows窗体应用程序中以编程方式绘制或操作图形图像。
总而言之, GDI+ 解决了GDI中的许多问题,可使用户更容易使用这些接口来绘制图形。null2、 GDI+的绘图命名空间
所有的GDI+ 函数都保存在System.Drawing.dll程序集中, 使用之前,必须添加相应的引用:
“项目”、“添加引用”、“System.Drawing.dll”
然后在程序中添加如下代码:
using System.Drawing.Drawing2D
主要的绘图命名空间
System.Drawing、
System.Drawing.Text、
System.Drawing.Printing、 System.Drawing.Imaging、 System.Drawing.Drawing2D、
System.Drawing.Design6.2 创建Graphics对象6.2 创建Graphics对象1、在GDI+的所有类中,Graphics类是核心,创建的Graphics对象相当于一张画布。可以调用绘图方法在其上画图。
一般,图形设计过程分为两步:创建Graphics对象、使用Graphics对象的方法进行绘图。
2、创建Graphics对象的方法一般有三种:
A、利用窗体或控件的Paint事件的参数PaintEventArgs
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g=e.Graphics;
}nullB、(一般使用)使用窗体或控件的CreateGraphics方法,用于对象已经存在的情况下:
Graphics g;
g=this.CreateGraphics();
C、使用Image类的派生类创建Graphics对象,用于在C#中对图像进行处理的场合:
Bitmap b=new Bitmap("ddd.bmp");
Graphics g=Graphics.FromImage(b);6.3 Pen对象6.3 Pen对象Pen 对象又称为画笔对象。
用途:绘制线条、多边形、曲线等几何图形。
Pen 对象的主要属性:宽度、样式、颜色。
1、 Pen 对象的创建(4种形式)
Pen p1=new Pen(Color);//创建某一颜色的Pen 对象
Pen p2=new Pen(Brush);//创建某一刷子样式的Pen 对象
Pen p3=new Pen(Brush,float);//创建某一刷子样式并具有相应宽度的的Pen 对象
Pen p4=new Pen(Color,float);//创建某一颜色和相应宽度的Pen 对象null例 在窗体上画一个椭圆:
private void button1_Click(object sender, System.EventArgs e)
{
Graphics g=this.CreateGraphics();
Pen p1=new Pen(Color.Red);
g.DrawEllipse(p1,20,30,10,50);//画椭圆
}
g.DrawLine(p1,1,1,400,6000);//画直线2、Pen对象的常用属性2、Pen对象的常用属性Alignment:设置Pen对象的对齐方式;
Color :设置Pen对象的颜色
Width :设置Pen对象的宽度
DashStyle :设置Pen对象绘制的虚线样式,只能取6个值:Custom、Dash、DashDot、DashDotDot、Dot、Solid
DashCap :指定虚线的两端风格,Flat、Round、Triagle
StartCap :设置Pen对象绘制直线起点的帽样式
EndCap :设置Pen对象的对象绘制直线终点的帽样式
PenType :设置Pen对象对象绘制直线的样式
使用举例:p1.Color=Color.Blue;
p1.DashStyle=DashStyle.Solid;
p1.DashCap=DashCap.Flat;6.4 Brush对象(画刷)6.4 Brush对象(画刷)作用:一般用来填充图形。
Brush类是一个抽象类,不能实例化,只能使用它的派生类:
SolidBrush(单色画刷)
(包含在命名空间System.Drawing中)、
HatchBrush(阴影画刷)、
LinearGradientBrush(颜色渐变画刷)、
PathGradientBrush(使用路径及复杂的混色渐变画刷)、
TextureBrush(纹理画刷)
(后三个包含在命名空间System.Drawing. Drawing2D中)null1、SolidBrush(单色画刷)
使用格式:SolidBrush ff=new SolidBrush(Color.Red);
例6.1 在窗体上绘制红色的椭圆
Graphics g=this.CreateGraphics();
SolidBrush ff=new SolidBrush(Color.Red);
g.FillEllipse(ff,ClientRectangle);null2、HatchBrush(阴影画刷)
使用格式:
A、HatchBrush ff=new HatchBrush(HatchStyle,Color);//Color为前景颜色
B、HatchBrush ff=new HatchBrush(HatchStyle,Color, Color);//第一个Color为前景颜色,第二个为背景色
其中HatchStyle取值固定,为阴影方式,如下图:
注意:使用HatchBrush(阴影画刷)一定要添加相应的引用,并使用命名空间using System.Drawing.Drawing2D;null例6.2 在窗体上绘制阴影的椭圆
Graphics g=this.CreateGraphics();
HatchBrush ff=new HatchBrush(HatchStyle.Cross,Color.Blue,Color.Red);
g.FillEllipse(ff,ClientRectangle);null3、LinearGradientBrush(颜色渐变画刷)
常用的渐变效果由两个颜色逐渐变化而来。
常用的使用格式:
LinearGradientBrush ff=new LinearGradientBrush(Point1, Point2,Color1,Color2);
其中,Point1为渐变的起点,Point2为渐变的终点,Color1为渐变的起点颜色,Color2为渐变的终点颜色
例6.3 在窗体上绘制渐变颜色的椭圆
Graphics g=this.CreateGraphics();
LinearGradientBrush ff=new LinearGradientBrush(new Point(0,20),new Point(20,0),Color.Yellow,Color.Blue);
g.FillEllipse(ff,ClientRectangle);6.5 Font对象6.5 Font对象Font对象建立之后不能修改,如果需要不同的字体,只有建立新的 Font对象。
Font对象的常用属性如下:Bold、Italic、Regular、Strikeout、Underline等等。
例6.4 在窗体上显示文字
Graphics g=this.CreateGraphics();
Font fi=new Font("Tahoma",20,FontStyle.Bold|FontStyle.Italic);
g.DrawString("GDI+编程世界",fi,new SolidBrush(Color.Blue),14,10);6.6 常用图形的绘制方法6.6 常用图形的绘制方法1、画直线
使用Graphics类的DrawLine方法,格式为:
DrawLine(画笔,x1,y1,x2,y2)
功能:在点(x1,y1),(x2,y2)之间画一条直线。
例6.5 画两条直线
Graphics g=this.CreateGraphics();//生成图形对象
Pen Mypen=new Pen(Color.Blue ,5);//生成画笔,蓝色,5个像素
g.DrawLine(Mypen,1,1,30,30);//画线
Point pt1=new Point(1,30);//生成起点
Point pt2=new Point(30,1);//生成终点
g.DrawLine(Mypen,pt1,pt2);//画线null2、画椭圆
使用Graphics类的DrawEllipse方法,格式为:
A、DrawEllipse (画笔,矩形结构数据)
功能:绘制一个边界由矩形结构数据定义的椭圆。
B、DrawEllipse (画笔,x,y,width,height)
功能:绘制一个由边框定义的椭圆。
例6.6 画一个椭圆
Graphics g=this.CreateGraphics();//生成图形对象
Pen Mypen=new Pen(Color.Blue ,5);//生成画笔,蓝色,5个像素
g.DrawEllipse(Mypen,1,1,80,40);//画椭圆
Rectangle rect=new Rectangle(85,1,165,40);//生成矩形
g.DrawEllipse (Mypen,rect);//画椭圆null3、画圆弧
使用Graphics类的DrawArc方法,格式为:
A、DrawArc (画笔,矩形结构数据,实数,实数)
功能:绘制由指定矩形的内接椭圆的一段圆弧。
B、DrawArc (画笔,x,y,width,height,整数,整数)
功能:绘制一段弧线,该弧线由一对坐标、宽度、高度指定椭圆的一段圆弧。
例6.7 画一段圆弧
Graphics g=this.CreateGraphics();//生成图形对象
Pen Mypen=new Pen(Color.Blue ,5);//生成画笔,蓝色,5个像素
g.DrawArc(Mypen,1,1,80,40,90,270);//画弧线
Rectangle rect=new Rectangle(85,1,165,40);//生成起点 生成矩形结构
g.DrawArc (Mypen,rect,0,90);//画弧线null4、画扇形图
使用Graphics类的DrawPie方法,格式与DrawArc基本相同
例6.8 画两个扇形
Graphics g=this.CreateGraphics();//生成图形对象
Pen Mypen=new Pen(Color.Blue ,5);//生成画笔,蓝色,5个像素
g.DrawPie(Mypen,1,1,80,40,90,270);//画扇形
Rectangle rect=new Rectangle(85,1,165,40);//生成矩形
g.DrawPie (Mypen,rect,0,90);//画扇形null5、画矩形
使用Graphics类的DrawRectangle方法,格式为:
A、DrawRectangle (画笔,矩形结构数据)
功能:绘制一个边界由矩形结构数据定义的矩形。
B、DrawRectangle (画笔,x,y,width,height)
功能:绘制一个由左上角坐标、宽度、高度定义的矩形。
例6.7 画一个矩形
Graphics g=this.CreateGraphics();//生成图形对象
Pen Mypen=new Pen(Color.Blue ,2);//生成画笔,蓝色,2个像素
g.DrawRectangle (Mypen,5,5,80,40);//画矩形
Rectangle rect=new Rectangle(85,15,140,50);//生成矩形
g.DrawRectangle (Mypen,rect);//画矩形null6、画多边形
使用Graphics类的DrawPolygon方法,格式为:
A、DrawPolygon (画笔,Point[] points)
功能:绘制由一组Point结构定义的多边形。
B、DrawPolygon (画笔,PointF[] points)
功能:绘制由一组PointF结构定义的多边形
Point 结构只能取整数,PointF可以取实数null例6.8 画一个多边形
Pen blackPen = new Pen(Color.Black, 3);//生成画笔;
Graphics g=this.CreateGraphics();//生成图形对象
Point point1 = new Point( 50, 50);//生成5个点
Point point2 = new Point(70, 25);Point point3 = new Point(100, 30);
Point point4 = new Point(120, 85);Point point5 = new Point(80, 100);
Point[] curvePoints ={point1,point2,point3,point4,point5};
//定义Point结构的数组
g.DrawPolygon(blackPen, curvePoints);//绘制多边形null7、绘制闭合曲线
使用Graphics类的DrawClosedCurve方法,格式为:
A、 DrawClosedCurve (画笔,Point[] points)
功能:绘制由一组Point结构定义的闭合曲线。默认张力为0.5
B、 DrawClosedCurve (画笔,Point[] points,float s,FillMode F)
功能:使用指定的张力绘制由一组Point结构定义的闭合基数样条
s为指定曲线的张力,F为填充曲线的方式null例6.9 绘制一个闭合曲线
Graphics g=this.CreateGraphics();
Pen p=new Pen(Color.Black,3);
Point p1=new Point(50,50);
Point p2=new Point(70,25);
Point p3=new Point(100,30);
Point p4=new Point(120,85);
Point p5=new Point(80,100);
Point[] ps={p1,p2,p3,p4,p5}; g.DrawClosedCurve(p,ps,0.9F,FillMode.Alternate);
null8、绘制非闭合曲线
使用Graphics类的DrawCurve方法,格式为:
A、 DrawClosedCurve (画笔,Point[] points)
功能:绘制由一组Point结构定义的非闭合曲线。默认张力为0.5
B、 DrawClosedCurve (画笔,Point[] points,float s,FillMode F)
功能:使用指定的张力绘制由一组Point结构定义的非闭合基数样条
s为指定曲线的张力,F为填充曲线的方式
null9、填充椭圆
使用Graphics类的FillEllipse方法,格式为:
A、 FillEllipse(Brush F,矩形结构数据)
功能:填充边界由矩形结构数据定义的椭圆。
B、 FillEllipse(Brush F,x,y,width,height)
功能:填充一个由边框(坐标、宽度、高度)定义的椭圆。null例6.10 填充一个椭圆
Graphics g=this.CreateGraphics();//生成图形对象
SolidBrush BlueBrush = new SolidBrush(Color.Blue);//生成填充用的画刷
int x = 0;//定义外接矩形的左上角坐标和高度及宽度
int y = 0; int width = 200; int height = 100;
Rectangle rect = new Rectangle( x, y, width, height);//定义矩形
g.FillEllipse(BlueBrush,rect);//填充椭圆null10、填充矩形
使用Graphics类的FillRectangle方法,格式为:
A、 FillRectangle(Brush F,矩形结构数据)
功能:用指定的画刷填充一个矩形。
B、 FillRectangle (Brush F,x,y,width,height)
功能:填充一个由边框(坐标、宽度、高度)定义的矩形。null例6.11 填充一个矩形
Graphics g=this.CreateGraphics();//生成图形对象
SolidBrush BlueBrush = new SolidBrush(Color.Blue);//生成填充用的画刷
int x = 15;//定义外接矩形的左上角坐标和高度及宽度
int y = 15;
int width = 200;
int height = 100;
Rectangle rect = new Rectangle( x, y, width, height);//定义矩形
g.FillRectangle(BlueBrush,rect);//填充矩形null11、填充饼形图
使用Graphics类的FillPie方法,格式为:
A、 FillPie(Brush F,矩形结构数据,float s,float sw)
功能:用指定的画刷填充椭圆所定义的扇形区的内部,该扇形区由矩形结构数据和两条射线指定.
s为从x轴到弧线起点沿顺时针方向度量的角, sw为从x参数到弧线的结束点沿顺时针方向度量的角.
B、 FillRectangle (Brush F,x,y,width,height, float s,float sw)
功能:填充一个由边框(坐标、宽度、高度)及两条射线所指定的椭圆所定义的扇形区的内部null例6.12 填充一个饼形图
Graphics g=this.CreateGraphics();
SolidBrush bl=new SolidBrush(Color.Blue);
g.FillPie(bl,1,1,80,40,90,270);
Rectangle rect=new Rectangle(85,1,165,40);
g.FillPie(bl,rect,0,90);6.7 典型实例6.7 典型实例实例1 利用鼠标画图
编写一个利用鼠标在窗体上画图的程序,无论何时用户按下并拖动鼠标均会画出一条线。
实现方法;使用MouseDown(开始画图)、MouseUp(结束画图)、MouseMove(执行画图)null可擦写图形轮廓的实现
编写一个画一系列椭圆的程序, 当按下并拖动鼠标时,将出现一个椭圆轮廓,该椭圆轮廓表示所画椭圆的大小.当松开鼠标时,将在窗体上绘制出用兰色填充的椭圆.课堂练习作业作业1、复习第六章
2、上机实践本次课的例题
3、作业
P307 1、2、3、4、5
4、实验1