版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章GDI+编程课程目标讨论重画与onpaint方法通过GDI+创立图形图像探讨GDI+中的对象:Pen、Brush和Color通过GDI+绘制线条、写文本、显示图像讨论GDI+中的坐标一、关于重画我们创立一个Windows应用程序,首先把窗体的背景色设置为白色。在构造函数中增加如下代码: //显示本窗体this.Show();//为本窗体创立一个graphice对象Graphicsdc=this.CreateGraphics();//定义一个蓝画笔PenbluePen=newPen(Color.Blue,3);//用蓝色画一个矩形dc.DrawRectangle(bluePen,0,0,50,50);//再定义一个红画笔PenredPen=newPen(Color.Red,2);//用红色画一个椭圆dc.DrawEllipse(redPen,0,50,80,60);结果会显示一个矩形和椭圆。我们发现:一、如果最小化该窗体,再恢复它,绘制好的图形就不见了。二、如果在该窗体上拖动另一个窗口,使之只显示一局部图形,再把该窗口拖离这个窗体,临时被挡住的局部就消失了,只剩下一半椭圆或矩形了!问题原因:问题发生的原因是,如果窗口的一局部被隐藏了,Windows通常会立即删除与其中显示的内容相关的所有信息。一般窗体显示出来(Show),激活(Activate),调整大小(Resize),恢复窗体等时候,都会自动重画。解决方法:如果把这段代码放在paint事件对应的方法中就不会有这种现象了。Windows会利用Paint事件通知应用程序需要完成一些重新绘制的要求。关于onpaint方法:Paint事件默认处理虚方法OnPaint()的调用,所以使用重写onpaint方法也能得到同样的效果。引申话题:在使用Windows窗体的效劳器控件时,不需要知道这些,这是因为标准控件非常专业,能在Windows需要时重新绘制它们自己。这是编写控件时不需要担忧实际绘图过程的原因之一。如果要应用程序在屏幕上绘图,还需要在Windows要求重新绘制窗口的全部或局部时,确保应用程序会正确响应。二、GDI+简介GDI+:GraphicsDeviceInterface类,GDI+是.NETFramework的绘图技术 当创立一个窗口,并在该窗口中进行绘图时,一般要声明一个派生于.Form的类。如果要编写一个定制控件,就要声明一个派生于的类。在这两种情况下,都重写了虚拟函数OnPaint()。只要窗口的任何一局部需要重新绘制,Windows都会调用这个函数。二、GDI+简介GDI+提供在WinForms中实现图形的根本功能GDI+存在于程序集中使用System.Drawing.Text、System.Drawing.Imaging和System.Drawing.Drawing2D等类可以绘制并填充形状,提供有吸引力的彩色文本,还可以在不使用任何图片控件的情况下绘制图像GDI+基类的主要命名空间System.Drawing包含与基本绘图功能有关的大多数类、结构、枚举和委托System.Drawing.Drawing2D为大多数高级2D和矢量绘图操作提供了支持,包括消除锯齿、几何转换、和图像路径。System.Drawing.Imaging帮助处理图像(位图、GIF文件等)的各种类System.Drawing.Printing把打印机或打印预览窗口作为输出设备时使用的类System.Drawing.Design一些预定义的对话框、属性表和其他用户界面元素,与在设计期间拓展用户界面相关。System.Drawing.Text对字体和字体系列执行更高级操作的类.Net框架结构中对GDI的封装System.Drawing中常用结构1,Color封装了对颜色的定义。它封装了数百个分别对应与标准调色板的静态成员。如:Color.Black代表黑色等。静态方法:FromArgb:通过三原色构造Color对象Color.FromArgb(Int32):从一个32位ARGB值创立Color结构。如:Color.FromArgb(0x78FF0000)Color.FromArgb(Int32,Color):带透明度和颜色初始化Color.FromArgb(Int32,Int32,Int32):不带透明度FromKnownColor:通过颜色构造Color对象FromName:通过颜色名称来构造Color对象System.Drawing中常用结构2,Size和SizeF表示绘制平面上的一个尺寸,一个为整数,一个为浮点数。构造函数:Size(Point):从指定的Point初始化Size类的新实例。Size(X,Y):用指定尺寸初始化Size类的新实例。属性:Width:表示宽度值,Height:表示高度值重载了加,减,比较,赋值操作。Sizes1;Sizes2=s1+100System.Drawing中常用结构3,Point和PointF表示绘制平面上点的坐标,一个为整数,一个为浮点数。构造函数:Point(Size):从Size初始化PointPoint(int32,int32):用指定坐标初始化Point类的新实例。重载了加,减,比较,赋值操作。System.Drawing中常用结构4,Rectangle和RectangleF表示绘制平面上的一个矩形区域。属性:Bottom,Top:矩形底部,顶部的纵坐标Left,Right:矩形左边,右边的横坐标Height:矩形的高度Width:矩形的宽度Size:矩形的尺寸IsEmpty:矩形是否为空〔宽,高是否为0〕X:矩形左上角的横坐标Y:矩形左上角的纵坐标三、Graphics类属于System.Drawing命名空间不可继承可以通过多种方式创立Graphics对象:重写OnPaint方法并获得对图形的引用使用窗体的Paint事件以获得对图形的引用GreatGraphics方法FromImage方法1、得到Graphics对象实例protectedoverridevoidOnPaint(PaintEventArgspaintevent){Graphicsgraf=paintevent.Graphics;}privatevoidmainForm_Paint(objectsender,PaintEventArgspaintevent){Graphicsgraf=paintevent.Graphics;}2、CreateGraphics方法CreateGraphics()方法用于创立Graphics对象它是Control类的方法例如privatevoidPaintMe(Controltestcontrol){ Graphicsgraf=CreateGraphics(); ...}3、FromImage方法可以从由Image类派生的任何对象创立Graphics对象通过使用Graphics类的FromImage方法可以完成此操作例如//从图形文件Face.bmp创立Bitmap。Bitmapbmpimage=newBitmap(“cat.bmp");//从Bitmap创立Graphics,目的是为了改变原来的图片内容了Graphicsgraf=Graphics.FromImage(bmpimage);//在原来图像的根底上增加一个椭圆graf.DrawEllipse(newPen(Color.Red),0,0,20,20);//将最终的Bitmap绘制到屏幕。e.Graphics.DrawImage(bmpimage,20,20);四、形状和图像 Graphics对象在创立后,可用于绘制线条和形状、呈现文本或显示与操作图像。与Graphics对象一起使用的主要对象有:Pen类--用于绘制线条、勾勒形状轮廓或呈现其他几何表示形式。Brush类--用于填充图形区域,如实心形状、图像或文本。Font类--提供有关在呈现文本时要使用什么形状的说明。Color结构--表示要显示的不同颜色四、形状和图像1、Pen类属于System.Drawing命名空间用于指定形状的宽度、样式和填充样式无法继承,但可以通过实例化该类来创立对象Penourpen=newPen(Color.Blue,5);2、Brush类属于System.Drawing命名空间用于在形状中填充纯色是抽象类可以使用SolidBrush、LinearGradientBrush和TextureBrush类来创立Brush对象SolidBrushmyBrush=newSolidBrush(Color.Blue); Brush和SolidBrush类在System.Drawing名称空间中,但TextureBrush和LinearGradientBrush类在名称空间中。下面是这些类的作用:●SolidBrush用一种单色填充图形。●
TextureBrush用一个位图填充图形。在构造这个画笔时,还指定了边框矩形和填充模式。边框矩形指定画笔使用位图的哪一局部——可以不使用整个位图。填充模式有许多项选择项,如Tile平铺纹理,TileFlipX、TileFlipY和TileFlipXY指定连续平铺时翻转图像。使用TextureBrush可以创立出非常有趣和富有想像力的效果。●LinearGradientBrush封装了一个画笔,该画笔可以绘制两种颜色渐变的图形,其中第一种颜色以指定的角度逐渐过渡到第二种颜色。角度的单位是度。0º表示颜色从左向右过渡。90°表示颜色从上到下过渡。Color结构用于为GDI+中的图形创立或使用颜色。Graphicsg=e.Graphics;g.Clear(Color.MistyRose);五、利用Graphics实例的方法来绘制图形方法名称 描述 Clear 去除绘图外表,并用指定的背景色进行填充DrawLine 绘制线条DrawRectangle 绘制矩形DrawArc 绘制弧 DrawEllipse 绘制椭圆DrawImage 绘制图像DrawString 绘制文本字符串FillEllipse 用颜色填充椭圆FillRectangle 用颜色填充矩形1、各种绘制方法—DrawLine方法Graphics类的DrawLine()方法用于在屏幕上绘制线条publicvoidDrawLine(Pen,Point,Point);publicvoidDrawLine(Pen,PointF,PointF);publicvoidDrawLine(Pen,int,int,int,int);publicvoidDrawLine(Pen,float,float,
float,float);函数原型DrawLine方法例子Graphicsg=e.Graphics;PenblackPen=newPen(Color.Black,1);if(ClientRectangle.Height/10>0){for(inty=0;y<ClientRectangle.Height;y+=ClientRectangle.Height/10){g.DrawLine(blackPen,newPoint(0,0),newPoint(ClientRectangle.Width,y));}}blackPen.Dispose();2、DrawPath方法例子base.OnPaint(e);GraphicsPathpath;path=newGraphicsPath(newPoint[]{newPoint(10,10),newPoint(150,10),newPoint(200,150),newPoint(10,150),newPoint(200,160)},newbyte[]{(byte)PathPointType.Start,(byte)PathPointType.Line,(byte)PathPointType.Line,(byte)PathPointType.Line,(byte)PathPointType.Line});e.Graphics.DrawPath(Pens.Black,path);2、DrawString方法在屏幕上显示文本,而不使用任何与文本相关的控件。publicvoidDrawString(string,Font,Brush,PointF);publicvoidDrawString(string,Font,Brush,RectangleF);publicvoidDrawString(string,Font,Brush,PointF,StringFormat);publicvoidDrawString(string,Font,Brush,RectangleF,StringFormat);publicvoidDrawString(string,Font,Brush,float,float);publicvoidDrawString(string,Font,Brush,float,float,StringFormat);a,b,c函数原型DrawString方法的例1见备注中的代码DrawString方法的例2见备注中的代码3、DrawImage方法publicvoidDrawImage(Image,Point)publicvoidDrawImage(Image,Point[])publicvoidDrawImage(Image,PointF)publicvoidDrawImage(Image,PointF[])publicvoidDrawImage(Image,Rectangle)函数原型用于使用Image对象绘制图像。包括GIF、JPG和BMP等图像绘制JPG图像实例protectedoverridevoidOnPaint(PaintEventArgsp_event){ intx_coord,y_coord; Imagetestimage=Image.FromFile(@"c:\boat.jpg"); Graphicsgraf=p_event.Graphics; x_coord=10;y_coord=10;
graf.DrawImage(testimage,x_coord,y_coord);}绘制GIF图像实例protectedoverridevoidOnPaint(PaintEventArgspaintevt){Imageimg=Image.FromFile(@"c:\emoticon.gif");Graphicsgraf=Graphics.FromImage(img);paintevt.Graphics.DrawImage(img,50,50);}利用DrawImage提高绘图速度见备注中的代码4、DrawRectangle
方法见备注中的代码5、FillEllipse方法见备注中的代码6、FillRegion方法见备注中的代码7、FillPolygon方法填充Point
结构指定的点数组所定义的多边形的内部8、GDI+打印回忆?高级用户界面?中的打印对话框:〔1〕打印机打印的原理就是通过GDI+在打印机写文字和图形〔2〕创立得到Graphics对象实例还可以通过printdocument组件的PrintPage事件对应的PrintPageEventArgs参数获得例子讲解
简单文本编辑器下面我们编写打印代码,我们希望通过pring菜单将内容输出到打印机上,我们通过printdoument组件来实现,在前面的例子中我们用e.Graphics.DrawString(richTextBox1.Text,newFont(“Arial〞,10),Brushes.Black,10,10); 就可以实现输出了,但是我们发现打印的时候只能写一页,当超过一页那么要精确处理了。备注中的代码演示了这个过程。例子讲解
简单文本编辑器我们发现在执行打印的过程中,下面的这段代码重复执行了:char[]param={'\n','\r'};string[]lines=richTextBoxText.Text.Split(param);我们可以将这段代码放入beginprint事件中,那么使得效率更高。修改后的代码在备注中。例子讲解
简单文本编辑器1、如果我们还想打印选定的内容,我们还要增加一些控制选项。2、我们还可以通过对话框对打印机和打印纸张进行设置最后的完整的代码在备注中。六、GDI+中的坐标原点定位屏幕与工作区坐标转换坐标单位原点定位默认原点是(0,0)可以使用Translat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高职花卉(鉴别技巧)试题及答案
- 2025年大学大二(口腔医学技术)义齿修复工艺综合测试题
- 2025年高职物理教育(物理教学方法)试题及答案
- 2025年高职物流管理(仓储配送优化)试题及答案
- 新建1个7万吨级散粮卸船泊位项目可行性研究报告模板立项申批备案
- 狗狗职业发展规划演讲稿
- 社群营销介绍宣传
- 2026广西桂林航天工业学院招聘高层次人才10人备考题库完整参考答案详解
- 2026新疆昆东经济技术开发区管委会招聘19人备考题库及答案详解(新)
- 2025国家电投集团数字科技有限公司招聘10人备考题库(第三批)有答案详解
- GB/T 43824-2024村镇供水工程技术规范
- 心力衰竭药物治疗的经济评估与成本效益分析
- 道路绿化养护投标方案(技术方案)
- QA出货检验日报表
- 校服采购投标方案
- 中外建筑史课件
- 母婴保健-助产技术理论考核试题题库及答案
- dd5e人物卡可填充格式角色卡夜版
- 海克斯康机器操作说明书
- GB/T 6003.1-1997金属丝编织网试验筛
- GB/T 24207-2009洗油酚含量的测定方法
评论
0/150
提交评论