《图形与图像》PPT课件.ppt_第1页
《图形与图像》PPT课件.ppt_第2页
《图形与图像》PPT课件.ppt_第3页
《图形与图像》PPT课件.ppt_第4页
《图形与图像》PPT课件.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十二章 图形与图像,12.1 案例分析,案例分析,问题提出 期望效果,案例分析,主要功能 1、通过工具栏按钮启动、关闭课件伴侣功能 2、能够选择绘画类型,比如是画直线还是矩形 2、能够调整画笔颜色、宽度、线型 4、能够实现屏幕放大显示,技术点 1、屏幕图像的获取(截屏) 2、Graphics类使用 3、Pen类使用 4、Image类使用 5、Mouse事件运用,12.2 图像 画笔 笔刷,Graphics、Pen、Brush,图像Graphics,Graphics类 可以将Graphics理解为一块画布,它还提供了如画直线、曲线、显示图片等许多绘画的方法。常用方法有: Clear 清除整个绘图面并以指定背景色填充 CopyFromScreen复制屏幕图像数据 DrawEllipse 绘制一个由边框定义的椭圆 DrawImage 在指定位置并且按原始大小绘制指定的 Image 对象 DrawLine 绘制一条连接由坐标对指定的两个点的线条 DrawLines绘制一系列连接一组 Point 结构的线段 DrawRectangle 绘制由坐标对、宽度和高度指定的矩形 DrawString 在指定位置用指定的Brush和Font对象绘制指定的文本字符串 FillEllipse 填充边框所定义的椭圆的内部 FillRectangle 填充由一对坐标、一个宽度和一个高度指定的矩形的内部 FromImage 从指定的 Image 对象创建新 Graphics 对象,图像Graphics,创建Graphics对象 : 1、通过Paint事件处理过程中的PaintEventArgs创建Graphics对象 Paint事件当在控件需要被重绘时触发。 参数 PaintEventArgs 提供了需要被重新绘制的Graphics对象。 例:,private void Form1_Paint(object sender, PaintEventArgs e) Graphics g = e.Graphics; g.DrawString(“Paint事件中的Graphics对象“, new Font(“宋体“, 15), Brushes.DarkSeaGreen, new PointF(10, 20); ,Graphics类,2、通过调用可视化控件件的CreateGraphics方法来创建一个Graphics对象。 调用CreateGraphics会返回一个Graphics对象。 例: 说明: 第一行代码通过调用label1的CreateGraphics方法创建了Graphics对象g。 第二行代码调用了Graphics的DrawIcon方法,该方法用来在Graphics绘制一个指定图标。第一个参数指出要绘制的图标,第二个和第三个参数指出图标绘制的开始位置。,private void label1_Click(object sender, EventArgs e) Graphics g = label1.CreateGraphics(); g.DrawIcon(this.Icon, 0, 0); ,Graphics类,3、从 Image 对象创建 Graphics 类提供了一个方法FromImage,能够根据Image类及其派生类创建Graphics对象。 一般用于对包含在Image类及其派生类中的图像进行处理。 如:,Bitmap b=new Bitmap(“ddd.bmp“); Graphics g=Graphics.FromImage(b);,画笔Pen,Pen用来绘制直线或曲线。线条都具有颜色、粗细、线型等特征,所以Pen也有对应的Color、Width、DashStyle等属性。常用属性如下 : Color属性:获取或设置此 Pen 对象的颜色 Width属性:获取或设置此 Pen 对象的宽度 Brush属性:获取或设置用于此 Pen 对象的画刷对象 DashStyle属性:获取或设置用于通过此 Pen 对象绘制的线型,画笔Pen,DashStyle 的成员:,画笔Pen,示例:在图片框pictureBox1上画一条直线和一个矩形: private void pictureBox1_Paint(object sender, PaintEventArgs e) /创建一支黑色,宽度为2的Pen。 Pen p = new Pen(Color.Black, 2); /得到Graphics对象。 Graphics c =e.Graphics; /设置纤线型为短划线,如果没有设置,默认DashStyle为实线。 p.DashStyle = DashStyle.Dash; /使用Pen画一条直线,参数分别为要使用的Pen对象,直线起点和终点的X、Y坐标。 c.DrawLine(p, 10, 20, 100, 20); /改变线型为点画线 p.DashStyle = DashStyle.DashDotDot; /使用Pen画一个矩形,参数分别为要使用的Pen对象,矩形的左上角X、Y坐标和矩形的宽度和高度。 c.DrawRectangle(p, 50, 50, 100, 100); ,画刷Brush,画刷用来对一个区域进行填充。Brush是一个抽象类,只能通过使用Brush的子类 来使用画刷: SolidBrush(实体画刷) HatchBrush(阴影画刷) LinearGradientBrush(线性渐变画刷) PathGradientBrush(路径渐变画刷) TextureBrush(纹理华刷),工具栏设计,工具栏是一个ToolStrip控件 工具栏要始终悬停在屏幕最顶端 只在屏幕上露底部的一小部分 只有当鼠标移上去后,它才慢慢将整个工具栏显示出来 当鼠标移开工具栏后,工具栏又慢慢缩回顶端去 需要两个Timer组件timer1和timer2来改变工具栏位置,工具栏设计,工具栏上移 工具栏下移 工具栏的鼠标事件,private void timer1_Tick(object sender, EventArgs e) if (Top12-Height) this.Top-; ,private void timer2_Tick(object sender, EventArgs e) if (Top 0) this.Top+; ,private void toolStrip1_MouseEnter(object sender, EventArgs e) timer2.Enabled = true; timer1.Enabled = false; private void toolStrip1_MouseLeave(object sender, EventArgs e) timer1.Enabled = true; timer2.Enabled = false; ,12.4 屏幕图像的获取,屏幕图像的获取,1、确定屏幕大小 Screen.PrimaryScreen.Bounds.Width Screen.PrimaryScreen.Bounds.Height 2、创建位图对象保存屏幕信息 Bitmap Bitmap_Screen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); 3、为位图创建Graphics对象 Graphics Graphics_ScreenBitmap = Graphics.FromImage(Bitmap_Screen);,屏幕图像的获取,4、将屏幕复制内容到新的Graphics对象 Graphics_ScreenBitmap.CopyFromScreen(new Point( 0, 0),new Point( 0, 0), Screen.PrimaryScreen.Bounds.Size); 5、显示屏幕截图 pictureBox1.Image = Bitmap_Screen;,12.5 图形的绘制,随手画,随手画即以鼠标点击处为起点,随鼠标移动不停地绘制直线,直到鼠标松开 记录鼠标按下位置 /记住绘画起点 private void PictureBox1_MouseDown(object sender, MouseEventArgs e) if (e.Button = MouseButtons.Left) /判断是否按下左键 StartX = e.X; StartY = e.Y; ,随手画,在鼠标移动过程中,从起点到当前点画直线,然后重新设置起点为当前鼠标位置 private void PictureBox1_MouseMove(object sender, MouseEventArgs e) int X = e.X; int Y = e.Y; if (e.Button != MouseButtons.Left) return; /未按左键、退出 switch (drawStyle) case DrawStyle.FreeHand: /随手画 CurrentGraphics.DrawLine(pen, StartX, StartY, X, Y); /画直线 /将当前点设为下一条直线的起点 StartX = X; StartY = Y; pictureBox1.Refresh();/刷新以显示刚绘制的内容 break; ,直线与橡皮筋效果,鼠标按下左键的位置为起点,松开左键的位置为终点的一条直线。在鼠标移动过程中,需要显示橡皮筋效果 思路: 在通过CreateGraphics方法得到的Graphics对象上绘制图形,图形会被立即显示但不会保存绘制图形 在通过FromImae方法创建的Graphics对象上绘制图形,图形可以被保存但不会立即显示 在鼠标移动过程中在通过CreateGraphics方法得到的Graphics对象上绘制图形,并在绘制下一图形前将其擦除。在鼠标松开时在通过FromImae方法创建的Graphics对象上绘制图形,直线与橡皮筋效果,在MouseMove事件中绘制直线: case DrawStyle.Line: pictureBox1.Refresh();/刷新清除上一条临时直线 Graphics_PictureBox.DrawLine(pen, StartX, StartY, e.X, e.Y); /绘制直线 break; ,直线与橡皮筋效果,当鼠标松开时: private void PictureBox1_MouseUp(object sender, MouseEventArgs e) if (e.Button != MouseButtons.Left) return; /不是左键,退出 int X = e.X; int Y = e.Y; switch (drawStyle) case DrawStyle.Line: CurrentGraphics.DrawLine(pen, StartX, StartY, X, Y); break; ,12.5 设置画笔,PenSet,设置画笔,PenSet penset = new PenSet(); if (penset.ShowDialog() = DialogResult.OK) /重新设置画笔颜色,bColor为设置对话框上的按钮,其背景色代表选中的颜色 maimForm.pen.Color = penset.bColor.BackColor; /重新设置画笔宽度,udWidth为设置对话框上的DomainUpDown控件名称 maimForm.pen.Width=int.Parse(penset.udWidth.Text); /根据设置窗口选项按钮值指定画笔线型 if (penset.radioButton1.Checked) maimForm.pen.DashStyle = DashStyle.Solid; if (penset.radioButton2.Checked) maimForm.pen.DashStyle = DashStyle.Dot; if (penset.radioButton3.Checked) maimForm.pen.DashStyle = DashStyle.DashDot; ,12.6 屏幕放大和图像漫游,屏幕放大,基本思路: 把一个小图像绘制到一个大的尺寸范围中,图像就会放大 步骤: 1、创建一个大小为屏幕2倍Bitmap位图对象ZBScreen 2、获取ZBScreen的Graphics对象 3、将保存有屏幕内容的Bitmap_Screen位图绘制到ZBScreenBitmap上 4、放大状态下图形绘制一定要使用ZBScreenBitmap,所以这里要改变当前要使用的Graphics对象 5、改变picture1Box1的Image属性,以便显示放大的位图 6、将picture1Box1的大小进行调整,使得与位图ZBScreen大小相同,图形漫游,思路: 只需改变picture1Box1的Left和Top属性来移动picture1Box1,就可以显示出被遮挡部分 步骤: 1、设置空白键状态变量 2、记录鼠标按下的位置 3、在MoeseMove事件中检查空白键是否按下,并根据鼠标和picture1Box1位置决定移动方向和距离,12.8 路径,GraphicsPath,路径GraphicsPath,1、路径的创建 GraphicsPath p = new GraphicsPath(); Point A=new Point(10,10); Point B=new Point(100,10); p.AddLine(new Point(10,10), new Point(10,10); p.AddRectangle(new Rectangle(AcceptButton,new Size(30,100); 2、绘制路径 e.Graphics.DrawPath(new Pen(Color.Red), p); 3、路径填充 e.Graphics.FillPath(new SolidBrush(Color.Red), p);,12.9 区域,Region,区域,1、区域的创建 GraphicsPath p = new GraphicsPath(); p.AddString(“文字区域“, new FontFamily(“宋体“), (int)FontStyle.Bold, 100.0f, new Point(10, 10), new StringFormat(); Region r = new Region(p); 2、区域的填充 e.Graphics.FillRegion(Brushes.Blue, r); 3、区域的剪裁效果 this.Region=r;,12.10 图形变换,坐标系类型,世界坐标是用于建立特殊图形世界模型的坐标系,也是在 .NET Framework 中传递给方法的坐标系 页面坐标系是指绘图图面(如窗体或控件)使用的坐标系 设备坐标系是在其上进行绘制的物理设备(如屏幕或纸张)所使用的坐标系,平移变换和坐标系,平移变换 myGraphics.TranslateTransform(100, 50); myGraphics.DrawLine(myPen, 0, 0, 160, 80);,旋转与缩放变换,RotateTransform方用来旋转坐标系 public void RotateTransform(float angle); angle为要旋转的角度,以度为单位 ScaleTransform方法用来缩放坐标系 public void ScaleTransform(float sx, float sy); sx为X方向上缩放因子,sy为Y方向缩放因子,旋转与缩放变换,示例: private void Form1_Paint(object sender, PaintEventArgs e) /创建半透明红色画刷 Brush b=new SolidBrush (Color.FromArgb(125,Color.Red); e.Graphics.FillRectangle(b, 100, 50, 100, 40); /填充矩形 e.Graphics.RotateTransform(30); /坐标系旋转30度 e.Graphics.FillRectangle(b,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论