您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 《C__WinForm实践开发教程》chp4.图型图像GDI编程
--------------基于C#语言Windows程序设计第四章、图型图像GDI编程本章主要内容介绍4.1繪圖的基本觀念4.2繪圖屬性與方法4.3繪圖相關類別CONTENT本章学习目标:•了解System.Drawing命名空间•掌握矢量图形和绘制对象•可以绘制简单的几何图形•掌握图像的基本处理技术4.1什么是GDI+首先先了解什么是GDI呢?GDI是从Windows95到Windows2000随附的旧版绘图装置接口(GraphicsDeviceInterface),是属于绘图方面的API(ApplicationProgrammingInterface)。因为应用程序不能直接控制硬件,所以当我们要进行绘图的动作时,必须透过GDI才能完成。那GDI+又是什么呢?GDI+是GDI的后续产品,是一种绘图装置接口,可将应用程序和绘图硬件分隔,让我们能够撰写与装置无关的应用程序。它可以让我们不需注意特定显示装置的详细数据,便可在屏幕或打印机显示信息。我们可以呼叫GDI+类别所提供的方法,然后这些方法会适当地呼叫特定的装置驱动程序,而完成绘图。4.2System.Drawing命名空间System.Drawing命名空间包含许多基本与进阶的绘图类别,供程序开发者来完成各种绘图功能。本章在此仅介绍System.Drawing命名空间中一些常用的绘图类别。4.2System.Drawing命名空间在「GDI+」中所采用的坐标系统,与平时人们较常用的坐标系统不同,主要差别在于,一般的二维坐标系,x轴与y轴分别是往右往上递增(左图),而「GDI+」所采用的坐标系,x轴与y轴则分别是往右往下递增(右图)1、坐标系统4.2System.Drawing命名空间在数学定义中,坐标上的最基本元素:「点」,其实是个长度与宽度都无穷小的概念单位,但是在计算器图学中,作画的最基本元素是「像素(pixel)」当我们的屏幕分辨率设定为1024*768时,表示在x轴横坐标总共可以画1024个「像素」,在y轴纵坐标总共可以画768个「像素」2、绘图基本单位4.3Graphics类别简介Graphics类别是GDI+的核心,若要绘制任何图形,都需要先取得Graphics对象,设定它的属性,呼叫它的方法来完成绘图的工作。由于Graphics类别并未公开其建构子,故无法以建构子来建立一个Graphics对象,而是要从您所要绘图的组件取得一个Graphics对象,其语法如下:Graphicsg=物件.CreateGraphics;以上叙述中的对象可为窗体(Form)及Control类别的衍生类别(例如,Label,PictureBox及TextBox等...),当上述对象呼叫CreateGraphics方法后,会传回一个Graphics对象,您可利用此一Graphics对象在建立它的对象上绘图。例如以下叙述可取得窗体的Graphics对象。Graphicsg=this.CreateGraphics;4.3Graphics类别简介privatevoidForm10_Paint(objectsender,PaintEventArgse){Graphicsg=e.Graphics;}1、在FORM的Paint方法中创建2、直接创建publicForm10(){InitializeComponent();Graphicsg;g=this.CreateGraphics();}3、由图像创建Bitmapmybitmap=newBitmap(@c:\1.jpg);Graphicsg=Graphics.FromImage(mybitmap);4.3Graphics类别简介privatevoidForm10_Paint(objectsender,PaintEventArgse){e.Graphics.Clear(Color.Red);}4、填充背景颜色案例指定顏色也可以利用RGB來指定,如:純紅色畫布:e.Graphics.Clear(Color.FromARGB(255,0,0));純綠色畫布:e.Graphics.Clear(Color.FromARGB(0,255,0));純藍色畫布:e.Graphics.Clear(Color.FromARGB(0,0,255));5、表单paint事件绘制图形privatevoidForm10_Paint(objectsender,PaintEventArgse){PendrawPen=newPen(Color.Black,3);e.Graphics.DrawLine(drawPen,10,10,300,100);}4.4Pen类别简介C#的绘图至少必须藉助Graphics与Pen类别对象的协助,其中Graphics对象就好比一块画布,而Pen类别对象就是画笔了。以下叙述可产生画笔对象,画笔的线条颜色为黑色,线条粗细为3。drawPen=NewPen(Color.Black,3);绘图方法Graphics类别的常用绘图方法有DrawLine(直线)、DrawRectangle(矩形)、DrawEllipse(椭圆)、DrawCurve(曲线)、DarwArc(弧线)、DrawPie(扇形)、DrawLines(多边形)、DrawPolygon(封闭多边形)DrawBezier(贝兹曲线)等。4.4Pen类别简介privatevoidForm10_Click(objectsender,EventArgse){Graphicsg=this.CreateGraphics();Penmypen=newPen(Color.Red,5);g.DrawLine(mypen,10,10,300,100);}案例1(绘制直线)请写一程序,当使用者按一下按键时,可于窗体绘制一条起点为(10,10),终点为(300,100)的直线。案例2:(绘制弧线)將於一個左上角位於(50,50),寬度為100,高度為350的矩形內,繪出一起始角為0度,弧角為120度的弧線。privatevoidForm10_Paint(objectsender,PaintEventArgse){PendrawPen=newPen(Color.Red,3);e.Graphics.DrawArc(drawPen,50,50,100,350,0,120);}4.4Pen类别简介privatevoidForm10_Click(objectsender,EventArgse){Graphicsg=this.CreateGraphics();e.Graphics.DrawPie(drawPen,50,50,100,50,0,90);}案例3:(绘制扇形)左上角位於(50,50),寬度為100,高度為50的矩形內,繪出一起始角為0度,弧角為90度的扇形。案例4:(绘制折线)繪出一條起點為(100,10),終點為(200,110),並通過(120,70)及(160,30)兩點的連續線段。privatevoidForm10_Paint(objectsender,PaintEventArgse){Graphicsg=this.CreateGraphics();PendrawPen=newPen(Color.Black,1);Pointp1,p2,p3,p4;p1=newPoint(100,10);p2=newPoint(120,70);p3=newPoint(160,30);p4=newPoint(200,110);Point[]points={p1,p2,p3,p4};g.DrawLines(drawPen,points);}4.4Pen类别简介privatevoidForm10_Paint(objectsender,PaintEventArgse){Graphicsg=this.CreateGraphics();PendrawPen=newPen(Color.Black,1);Pointp1,p2,p3,p4;p1=newPoint(100,10);p2=newPoint(120,70);p3=newPoint(200,110);p4=newPoint(300,10);Point[]points={p1,p2,p3,p4};g.DrawPolygon(drawPen,points);}案例5:(绘制多边形)繪出一個封閉多邊形,其起點為(100,10),終點為(300,10),並通過(120,70)及(200,110)兩點,最後此方法會在起點與終點之間補上一條直線。案例6:(绘制文字)於座標(100,50)的位置繪製文字privatevoidForm10_Paint(objectsender,PaintEventArgse){Graphicsg=this.CreateGraphics();FontdrawFont=newFont(隶书,15);SolidBrushdrawBrush=newSolidBrush(Color.Blue);g.DrawString(欢迎光临,drawFont,drawBrush,100,50);}4.4Pen类别简介•DashStyle属性取得或设定线条的样式,此样式必须是DashStyle列举型别的成员例如,以下敘述可將drawPen畫筆物件的線條樣式設定為虛線。drawPen.DashStyle=System.Drawing.Drawing2D.DashStyle.Dot;小技巧:可於程式開頭使用usingSystem,Drawing,Drawing2D;“先行宣告,以避免鍵入全名。4.4Pen类别简介•StartCap与EndCap属性取得或设定线条的端点样式,此样式必须LineCap列举型别的成员,如下表所示。例如,以下叙述可将drawPen画笔对象的线条端点设为箭头及菱形。drawPen.StartCap=System.Drawing.Drawing2D.LineCap.ArrowAnchor;drawPen.EndCap=System.Drawing.Drawing2D.LineCap.DiamondAnchor;4.4Pen类别简介•综合实验:4.5Brush类别简介Graphics类别像是一块画布,Pen类别像是一支画笔,但是这支画笔只具有画直线及外框(例如,椭圆形及扇形)的能力,若要对某一块区域进行填色的动作,Pen类别就没有办法做到了,而Brush类别就是用来对各种封闭图形填色的工具。针对各种需要,GDI+提供了五种Brush的衍生类别,分别是SolidBrush(单色)TextureBrush(材质)HatchBrush(预设图案)PathGradientBrush(自定义)LinearGradientBrush(渐层)等,以下仅针对SolidBrush(单色)与TextureBrush(材质)类别作进一步的介绍。4.5Brush类别简介privatevoidForm10_Paint(objectsender,PaintEventArgse){PendrawPen=newPen(Color.Red,3);SolidBrushmybrush=newSolidBrush(Color.Blue);e.Graphics.DrawRectangle(drawPen,10,10,300,100);e.Graphics.FillRectangle(mybrush,10,10,300,100);}案例1——FillRectangle(绘制填充矩形):在一個左上角位於(10,10),寬度300,高度100的矩形內填入蓝色。privatevoidForm10_Paint(objectsender,PaintEventArgse){PendrawPen=newPen(Color.Red,3);TextureBrushmybrush=newTextureBrush(Image.FromFile(@c:\1.jp
本文标题:《C__WinForm实践开发教程》chp4.图型图像GDI编程
链接地址:https://www.777doc.com/doc-4099205 .html