第12章图形与图像.ppt
《第12章图形与图像.ppt》由会员分享,可在线阅读,更多相关《第12章图形与图像.ppt(40页珍藏版)》请在三一文库上搜索。
1、第十二章 图形与图像,问题提出 期望效果,课件伴侣,案例分析,主要功能 1、通过工具栏按钮启动、关闭课件伴侣功能。 2、能够选择绘画类型,比如是画直线还是矩形 2、能够调整画笔颜色、宽度、线型。 4、能够实现屏幕放大显示。,技术点 1、屏幕图像的获取(截屏 ) 2、Graphics类使用 3、Pen类使用 4、Image类使用 5、Mouse事件运用,Graphics类,Graphics类 可以将Graphics理解为一块画布,而且它还提供了许多绘画的方法,比如画直线、曲线、显示图片等 : Clear 清除整个绘图面并以指定背景色填充。 CopyFromScreen复制屏幕图像数据。 Draw
2、Ellipse 绘制一个由边框定义的椭圆。 DrawImage 在指定位置并且按原始大小绘制指定的 Image 对象。 DrawLine 绘制一条连接由坐标对指定的两个点的线条。DrawLines绘制一系列连接一组 Point 结构的线段。 DrawRectangle 绘制由坐标对、宽度和高度指定的矩形。 DrawString 在指定位置用指定的Brush和Font对象绘制指定的文本字符串。 FillEllipse 填充边框所定义的椭圆的内部。 FillRectangle 填充由一对坐标、一个宽度和一个高度指定的矩形的内部。 FromImage 从指定的 Image 对象创建新 Graphic
3、s 对象,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
4、 PointF(10, 20); ,Graphics类,2、通过调用可视化控件件的CreateGraphics方法来创建一个Graphics对象 调用CreateGraphics会返回一个Graphics对象。例: private void label1_Click(object sender, EventArgs e) Graphics g = label1.CreateGraphics(); g.DrawIcon(this.Icon, 0, 0); 说明: 第一行代码我们通过调用label1的CreateGraphics方法创建了Graphics对象g。 第二行代码我们调用了Graphic
5、s的DrawIcon方法,该方法用来在Graphics绘制一个指定图标。第一个参数指出要绘制的图标,第二个和第三个参数指出图标绘制的开始位置。,Graphics类,3、从 Image 对象创建 Graphics 类提供了一个方法FromImage,能够根据Image类及其派生类创建Graphics对象。一般用于对包含在Image类及其派生类中的图像进行处理。如: Bitmap b=new Bitmap(“ddd.bmp“); Graphics g=Graphics.FromImage(b);,Pen,Pen用来绘制直线或曲线。常用属性如下 : Color属性:获取或设置此 Pen 对象的颜色,
6、其类型为Color。 Width属性:获取或设置此 Pen 对象的宽度。 Brush属性:获取或设置用于确定此 Pen 对象的属性的 Brush 对象。 DashStyle属性:获取或设置用于通过此 Pen 对象绘制的线型。该属性值为DashStyle 枚举类型。,Pen,DashStyle 的成员: Custom 指定用户定义的自定义划线段样式 线型由DashPattern属性确定 Dash 指定由短划线段组成的线条 DashDot 指定由点划线图案构成的线条 DashDotDot 指定由双点划线图案构成的线条 Dot 指定由点构成的线条 Solid 实线,Pen,示例:在图片框pictur
7、eBox1上画一条直线和一个矩形: 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,
8、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(纹
9、理华刷),屏幕图像的获取(截屏 ),步骤: 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_S
10、creen);,屏幕图像的获取(截屏 ),4、将屏幕复制内容到新的Graphics对象 Graphics_ScreenBitmap.CopyFromScreen(new Point( 0, 0),new Point( 0, 0), Screen.PrimaryScreen.Bounds.Size); 5、显示屏幕截图 pictureBox1.Image = Bitmap_Screen;,图形的绘制,随手画 随手画即以鼠标点击处为起点,随鼠标移动不停地绘制直线,直到鼠标松开。 1、记录鼠标按下位置 /记住绘画起点 private void PictureBox1_MouseDown(object
11、 sender, MouseEventArgs e) if (e.Button = MouseButtons.Left)/判断是否按下左键 StartX = e.X; StartY = e.Y; ,图形的绘制,2、在鼠标移动过程中,从起点到当前点画直线。然后重新设置起点为当前鼠标位置 private void PictureBox1_MouseMove(object sender, MouseEventArgs e) int X = e.X; int Y = e.Y; if (e.Button != MouseButtons.Left) return; /未按左键、退出 switch (dra
12、wStyle) case DrawStyle.FreeHand: /随手画 CurrentGraphics.DrawLine(pen, StartX, StartY, X, Y); /画直线 /将当前点设为下一条直线的起点 StartX = X; StartY = Y; pictureBox1.Refresh();/刷新以显示刚绘制的内容 break; ,图形的绘制,直线与橡皮筋效果 直线绘制是指绘制从鼠标按下左键的位置为起点,松开左键的位置为终点的一条直线。 在鼠标移动过程中,需要显示橡皮筋效果。 思路: 在通过CreateGraphics方法得到的Graphics对象上绘制图形,图形会被立
13、即显示但不会保存绘制图形。 在通过FromImae方法创建的Graphics对象上绘制图形,图形可以被保存但不会立即显示。 在鼠标移动过程中在通过CreateGraphics方法得到的Graphics对象上绘制图形,并在绘制下一图形前将其擦除。在鼠标松开时在通过FromImae方法创建的Graphics对象上绘制图形,图形的绘制,在MouseMove事件中绘制直线: case DrawStyle.Line: pictureBox1.Refresh();/刷新清除上一条临时直线 Graphics_PictureBox.DrawLine(pen, StartX, StartY, e.X, e.Y)
14、; /绘制直线 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; ,屏幕放大,基本思路: 把一个小图像绘制到
15、一个大的尺寸范围中时,就将起到图像放大的效果。 步骤: 1、创建一个大小为屏幕2倍Bitmap位图对象Zoom_Bitmap_Screen: Zoom_Bitmap_Screen = new Bitmap(Screen.PrimaryScreen.Bounds.Width * 2, Screen.PrimaryScreen.Bounds.Height * 2); 2、获取Zoom_Bitmap_Screen的Graphics对象: Zoom_Graphics_ScreenBitmap = Graphics.FromImage(Zoom_Bitmap_Screen); 3、将保存有屏幕原始内容的
16、Bitmap_Screen位图绘制到 Zoom_Graphics_ScreenBitmap上,注意在绘制时目标宽度和高度都为屏幕大小的2倍。,屏幕放大,Zoom_Graphics_ScreenBitmap.DrawImage(Bitmap_Screen, 0, 0, Screen.PrimaryScreen.Bounds.Width* 2,Screen.PrimaryScreen.Bounds.Height * 2); 4、放大状态下图形绘制一定要使用Zoom_Graphics_ScreenBitmap,所以这里要改变当前要使用的Graphics对象: CurrentGraphics =Zoo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12 图形 图像
链接地址:https://www.31doc.com/p-3420010.html