[计算机]第12章 图形与图像ppt课件_第1页
[计算机]第12章 图形与图像ppt课件_第2页
[计算机]第12章 图形与图像ppt课件_第3页
[计算机]第12章 图形与图像ppt课件_第4页
[计算机]第12章 图形与图像ppt课件_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、Visual C# Visual C# 案例教程案例教程l问题提出问题提出l期望效果期望效果主要功能主要功能1、经过工具栏按钮启动、经过工具栏按钮启动、封锁课件伴侣功能。封锁课件伴侣功能。2、可以选择绘画类型,、可以选择绘画类型,比如是画直线还是矩比如是画直线还是矩形形2、可以调整画笔颜色、可以调整画笔颜色、宽度、线型。宽度、线型。4、可以实现屏幕放大显、可以实现屏幕放大显示。示。技术点技术点1、屏幕图像的获取、屏幕图像的获取(截截屏屏 2、Graphics类运用类运用3、Pen类运用类运用4、Image类运用类运用5、Mouse事件运用事件运用lGraphics类类l可以将可以将Graphi

2、cs了解为一块画布,而且它还提供了许多了解为一块画布,而且它还提供了许多绘画的方法,比如画直线、曲线、显示图片等绘画的方法,比如画直线、曲线、显示图片等 :lClear 去除整个绘图面并以指定背风光填充。去除整个绘图面并以指定背风光填充。lCopyFromScreen复制屏幕图像数据。复制屏幕图像数据。lDrawEllipse 绘制一个由边框定义的椭圆。绘制一个由边框定义的椭圆。lDrawImage 在指定位置并且按原始大小绘制指定的在指定位置并且按原始大小绘制指定的 Image 对象。对象。lDrawLine 绘制一条衔接由坐标对指定的两个点的线条。绘制一条衔接由坐标对指定的两个点的线条。D

3、rawLines绘制一系列衔接一组绘制一系列衔接一组 Point 构造的线段。构造的线段。lDrawRectangle 绘制由坐标对、宽度和高度指定的矩形。绘制由坐标对、宽度和高度指定的矩形。lDrawString 在指定位置用指定的在指定位置用指定的Brush和和Font对象绘制指定对象绘制指定的文本字符串。的文本字符串。lFillEllipse 填充边框所定义的椭圆的内部。填充边框所定义的椭圆的内部。lFillRectangle 填充由一对坐标、一个宽度和一个高度指定的填充由一对坐标、一个宽度和一个高度指定的矩形的内部。矩形的内部。lFromImage 从指定的从指定的 Image 对象创

4、建新对象创建新 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

5、PointF(10, 20);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。第二行代码我们调用了Graphics的DrawIcon方法,该方法用

6、来在Graphics绘制一个指定图标。第一个参数指出要绘制的图标,第二个和第三个参数指出图标绘制的开场位置。3、从 Image 对象创建Graphics 类提供了一个方法FromImage,可以根据Image类及其派生类创建Graphics对象。普通用于对包含在Image类及其派生类中的图像进展处置。如:Bitmap b=new Bitmap(ddd.bmp);Graphics g=Graphics.FromImage(b);lPen用来绘制直线或曲线。常用属性如下用来绘制直线或曲线。常用属性如下 :lColor属性:获取或设置此属性:获取或设置此 Pen 对象的颜色,对象的颜色,其类型为其类

7、型为Color。lWidth属性:获取或设置此属性:获取或设置此 Pen 对象的宽度。对象的宽度。lBrush属性:获取或设置用于确定此属性:获取或设置用于确定此 Pen 对对象的属性的象的属性的 Brush 对象。对象。lDashStyle属性:获取或设置用于经过此属性:获取或设置用于经过此 Pen 对象绘制的线型。该属性值为对象绘制的线型。该属性值为DashStyle 枚举枚举类型。类型。lDashStyle 的成员:的成员:lCustom 指定用户定义的自定义划线段款式指定用户定义的自定义划线段款式l线型由线型由DashPattern属性确定属性确定 lDash 指定由短划线段组成的线条

8、指定由短划线段组成的线条lDashDot 指定由点划线图案构成的线条指定由点划线图案构成的线条lDashDotDot 指定由双点划线图案构成的线条指定由双点划线图案构成的线条lDot 指定由点构成的线条指定由点构成的线条lSolid 实线实线l例如:在图片框例如:在图片框pictureBox1上画一条直线和一个矩形:上画一条直线和一个矩形:lprivate void pictureBox1_Paint(object sender, PaintEventArgs e)l l/创建一支黑色,宽度为创建一支黑色,宽度为2的的Pen。lPen p = new Pen(Color.Black, 2);

9、l /得到得到Graphics对象。对象。lGraphics c =e.Graphics; l/设置纤线型为短划线,假设没有设置,默许设置纤线型为短划线,假设没有设置,默许DashStyle为实线。为实线。lp.DashStyle = DashStyle.Dash; l/运用运用Pen画一条直线,参数分别为要运用的画一条直线,参数分别为要运用的Pen对象,直线起点和终点的对象,直线起点和终点的X、Y坐标。坐标。lc.DrawLine(p, 10, 20, 100, 20); l/改动线型为点画线改动线型为点画线lp.DashStyle = DashStyle.DashDotDot;l/运用运用

10、Pen画一个矩形,参数分别为要运用的画一个矩形,参数分别为要运用的Pen对象,矩形的左上角对象,矩形的左上角X、Y坐标坐标和矩形的宽度和高度。和矩形的宽度和高度。l c.DrawRectangle(p, 50, 50, 100, 100); l l画刷用来对一个区域进展填充。画刷用来对一个区域进展填充。Brush是一个是一个笼统类,只能经过运用笼统类,只能经过运用Brush的子类的子类 来运用来运用画刷:画刷:l SolidBrush实体画刷实体画刷lHatchBrush阴影画刷阴影画刷lLinearGradientBrush线性渐变画刷线性渐变画刷lPathGradientBrush途径渐变

11、画刷途径渐变画刷lTextureBrush纹理华刷纹理华刷l步骤:步骤:l1、确定屏幕大小。、确定屏幕大小。l Screen.PrimaryScreen.Bounds.Width Screen.PrimaryScreen.Bounds.Heightl2、创建位图对象保管屏幕信息、创建位图对象保管屏幕信息l Bitmap Bitmap_Screen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);l3、为位图创建、为位图创建Graphics对象对象lGraphics Graph

12、ics_ScreenBitmap = Graphics.FromImage(Bitmap_Screen); 4 4、将屏幕复制内容到新的、将屏幕复制内容到新的GraphicsGraphics对象对象Graphics_ScreenBitmap.CopyFromScreen(new Graphics_ScreenBitmap.CopyFromScreen(new Point( 0, 0),new Point( 0, 0), Point( 0, 0),new Point( 0, 0), Screen.PrimaryScreen.Bounds.Size);Screen.PrimaryScreen.Bo

13、unds.Size);5 5、显示屏幕截图、显示屏幕截图pictureBox1.Image = Bitmap_Screen;pictureBox1.Image = Bitmap_Screen;l随手画随手画l 随手画即以鼠标点击处为起点,随鼠标挪动不随手画即以鼠标点击处为起点,随鼠标挪动不停地绘制直线,直到鼠标松开。停地绘制直线,直到鼠标松开。l1、记录鼠标按下位置、记录鼠标按下位置l /记住绘画起点记住绘画起点lprivate void PictureBox1_MouseDown(object sender, MouseEventArgs e)ll if (e.Button = MouseB

14、uttons.Left)/判别能否按下判别能否按下左键左键l StartX = e.X;l StartY = e.Y;l l2 2、在鼠标挪动过程中,从起点到当前点画直线。然后重新设置起点为当前、在鼠标挪动过程中,从起点到当前点画直线。然后重新设置起点为当前鼠标位置鼠标位置private void PictureBox1_MouseMove(object sender, MouseEventArgs e)private void PictureBox1_MouseMove(object sender, MouseEventArgs e) int X = e.X; int Y = e.Y; in

15、t X = e.X; int Y = e.Y; if (e.Button != MouseButtons.Left) return; / if (e.Button != MouseButtons.Left) return; /未按左键、退出未按左键、退出 switch (drawStyle) switch (drawStyle) case DrawStyle.FreeHand: / case DrawStyle.FreeHand: /随手画随手画 CurrentGraphics.DrawLine(pen, StartX, StartY, X, Y); / CurrentGraphics.Dra

16、wLine(pen, StartX, StartY, X, Y); /画直线画直线 /将当前点设为下一条直线的起点将当前点设为下一条直线的起点 StartX = X; StartY = Y;StartX = X; StartY = Y; pictureBox1.Refresh();/ pictureBox1.Refresh();/刷新以显示刚绘制的内容刷新以显示刚绘制的内容 break;break; l直线与橡皮筋效果直线与橡皮筋效果l直线绘制是指绘制从鼠标按下左键的位置直线绘制是指绘制从鼠标按下左键的位置为起点,松开左键的位置为终点的一条直线。为起点,松开左键的位置为终点的一条直线。 在鼠标

17、挪动过程中,需求显示橡皮筋效果。在鼠标挪动过程中,需求显示橡皮筋效果。l思绪:思绪:l在经过在经过CreateGraphics方法得到的方法得到的Graphics对象上绘制图形,图形会被立刻显示但不会对象上绘制图形,图形会被立刻显示但不会保管绘制图形。保管绘制图形。l在经过在经过FromImae方法创建的方法创建的Graphics对象上对象上绘制图形,图形可以被保管但不会立刻显示。绘制图形,图形可以被保管但不会立刻显示。l在鼠标挪动过程中在经过在鼠标挪动过程中在经过CreateGraphics方方法得到的法得到的Graphics对象上绘制图形,并在绘对象上绘制图形,并在绘制下一图形前将其擦除。

18、在鼠标松开时在经制下一图形前将其擦除。在鼠标松开时在经过过FromImae方法创建的方法创建的Graphics对象上绘制对象上绘制图形图形在在MouseMove事件中绘制直线:事件中绘制直线:case DrawStyle.Line: pictureBox1.Refresh();/刷新去除上一条暂时直线刷新去除上一条暂时直线 Graphics_PictureBox.DrawLine(pen, StartX, StartY, e.X, e.Y); /绘制直线绘制直线 break;当鼠标松开时:当鼠标松开时: private void PictureBox1_MouseUp(object sende

19、r, 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; l根本思绪:根本思绪:l把一个小图像绘制到一个大的尺寸范围中时,就将起到把一个小图像绘制到一个大的尺寸范围中时,就将起到图像放大的效果。图像放大的效果。l步骤:步骤:l1、创建一个大小为屏幕、

20、创建一个大小为屏幕2倍倍Bitmap位图对象位图对象Zoom_Bitmap_Screen:lZoom_Bitmap_Screen = new Bitmap(Screen.PrimaryScreen.Bounds.Width * 2, Screen.PrimaryScreen.Bounds.Height * 2);l2、获取、获取Zoom_Bitmap_Screen的的Graphics对象:对象:lZoom_Graphics_ScreenBitmap = Graphics.FromImage(Zoom_Bitmap_Screen);l3、将保管有屏幕原始内容的、将保管有屏幕原始内容的Bitmap

21、_Screen位图绘制到位图绘制到Zoom_Graphics_ScreenBitmap上,留意在绘制时目的上,留意在绘制时目的宽度和高度都为屏幕大小的宽度和高度都为屏幕大小的2倍。倍。Zoom_Graphics_ScreenBitmap.DrawImage(Bitmap_Screen, 0, 0, Zoom_Graphics_ScreenBitmap.DrawImage(Bitmap_Screen, 0, 0, Screen.PrimaryScreen.Bounds.WidthScreen.PrimaryScreen.Bounds.Width* * 2,Screen.PrimaryScreen

22、.Bounds.Height 2,Screen.PrimaryScreen.Bounds.Height * * 2); 2);4 4、放大形状以下图形绘制一定要运用、放大形状以下图形绘制一定要运用Zoom_Graphics_ScreenBitmapZoom_Graphics_ScreenBitmap,所以这里要改动当前要运用的所以这里要改动当前要运用的GraphicsGraphics对象:对象:CurrentGraphics =Zoom_Graphics_ScreenBitmap;CurrentGraphics =Zoom_Graphics_ScreenBitmap;5 5、改动、改动pict

23、ure1Box1picture1Box1的的ImageImage属性属性, ,以便显示放大的位图:以便显示放大的位图:picture1Box1.Image=Zoom_Bitmap_Screenpicture1Box1.Image=Zoom_Bitmap_Screen6 6、最初、最初picture1Box1picture1Box1的大小适宜屏幕大小一样的。但如今的大小适宜屏幕大小一样的。但如今picture1Box1picture1Box1里的里的ImageImage大小曾经是原来的大小曾经是原来的2 2倍了,所以将倍了,所以将picture1Box1picture1Box1的大小也进展调整的

24、大小也进展调整, ,使得其与位图使得其与位图Zoom_Bitmap_ScreenZoom_Bitmap_Screen大小一样:大小一样:picture1Box1.Size=Zoom_Bitmap_Screen.Size;picture1Box1.Size=Zoom_Bitmap_Screen.Size;l思绪:思绪:l由于放大的屏幕图像是放在由于放大的屏幕图像是放在picture1Box1之中,我们只需改动之中,我们只需改动picture1Box1的的Left和和Top属性属性来挪动来挪动picture1Box1,就可以显示出被遮挡部分。,就可以显示出被遮挡部分。l步骤:步骤:l1、设置空白键

25、形状变量。、设置空白键形状变量。l2、记录鼠标按下的位置。、记录鼠标按下的位置。l3、在、在MoeseMove事件中。检查空白键能否按下。事件中。检查空白键能否按下。并根据鼠标和并根据鼠标和picture1Box1位置决议挪动方向和间位置决议挪动方向和间隔。隔。l空白键形状变量设置:空白键形状变量设置:l1、在有键按下时:、在有键按下时:lprivate void frmMain_KeyDown(object sender, KeyEventArgs e)l l if (e.KeyCode = Keys.Space) /假设是空格键假设是空格键l IsSpacePressed = true;

26、/空格键按下标志为空格键按下标志为truel l2、按键松开,设置空格键按下标志为、按键松开,设置空格键按下标志为falselprivate void frmMain_KeyUp(object sender, KeyEventArgs e)l l IsSpacePressed = false;l l记录鼠标按下的位置。记录鼠标按下的位置。lprivate void PictureBox1_MouseDown(object sender, MouseEventArgs e)ll if (e.Button = MouseButtons.Left)/判别能否按下判别能否按下左键左键l StartX

27、= e.X;l StartY = e.Y;l ll3 3、MoeseMoveMoeseMove事件中的相关代码:事件中的相关代码:lif (IsSpacePressed) /if (IsSpacePressed) /按下了空格键,为图像遨按下了空格键,为图像遨游游l l/假设新位置假设新位置LetLet属性大于属性大于0 0,左边会出现空白区域,左边会出现空白区域, ,因此因此LeftLeft属性最大值为属性最大值为0 0。l/X/X为鼠标当前位置为鼠标当前位置X X坐标,坐标,StartXStartX为鼠标左键按下即为鼠标左键按下即开场遨游时的开场遨游时的X X坐标。坐标。l if (pic

28、tureBox1.Left + (X - StartX) 0) if (pictureBox1.Left + (X - StartX) 0) l pictureBox1.Left = 0; pictureBox1.Left = 0;l/假设新位置假设新位置LetLet属性小于窗体宽度属性小于窗体宽度Width - Width - pictureBox1.WidthpictureBox1.Width,l/右边会出现空白区域右边会出现空白区域, ,因此因此LeftLeft属性最小值为属性最小值为Width - Width - pictureBox1.WidthpictureBox1.Width。l

29、 else if (pictureBox1.Left + (X - StartX) else if (pictureBox1.Left + (X - StartX) 0) pictureBox1.Top = 0; else if (pictureBox1.Top + (Y - StartY) 12 - Height) this.Top-;2、Top逐渐增大,即工具栏下移。逐渐增大,即工具栏下移。if语句判别能否语句判别能否Top太大,太大,Top最大值为最大值为0,保证工具栏位于屏幕上端,保证工具栏位于屏幕上端private void timer2_Tick(object sender, Ev

30、entArgs e) if (Top 0) this.Top+;3、激活、激活timer2控件,工具栏上移控件,工具栏上移private void toolStrip1_MouseEnter(object sender, EventArgs e) timer2.Enabled = true; timer1.Enabled = false; 4、激活、激活timer1控件,工具栏上移控件,工具栏上移private void toolStrip1_MouseLeave(object sender, EventArgs e) timer1.Enabled = true; timer2.Enabled

31、 = false; l1、途径的创建、途径的创建lGraphicsPath p = new GraphicsPath();lPoint A=new Point(10,10);lPoint B=new Point(100,10);lp.AddLine(new Point(10,10), new Point(10,10); lp.AddRectangle(new Rectangle(AcceptButton,new Size(30,100);l2、绘制途径、绘制途径le.Graphics.DrawPath(new Pen(Color.Red), p);l3、途径填充、途径填充l e.Graphic

32、s.FillPath(new SolidBrush(Color.Red), p); l1、区域的创建、区域的创建lGraphicsPath p = new GraphicsPath();lp.AddString(文字区域文字区域, new FontFamily(宋体宋体), (int)FontStyle.Bold, 100.0f, new Point(10, 10), new StringFormat();lRegion r = new Region(p);l2、区域的填充、区域的填充le.Graphics.FillRegion(Brushes.Blue, r); l3、区域的剪裁效果、区域的

33、剪裁效果lthis.Region=r;l 坐标系类型坐标系类型 :l1、世界坐标是用于建立特殊图形世界模型、世界坐标是用于建立特殊图形世界模型的坐标系,也是在的坐标系,也是在 .NET Framework 中传中传送给方法的坐标系。送给方法的坐标系。l2、页面坐标系是指绘图图面如窗体或控、页面坐标系是指绘图图面如窗体或控件运用的坐标系。件运用的坐标系。l3、设备坐标系是在其上进展绘制的物理设、设备坐标系是在其上进展绘制的物理设备如屏幕或纸张所运用的坐标系。备如屏幕或纸张所运用的坐标系。 l平移变换平移变换 lmyGraphics.TranslateTransform(100, 50);lmyG

34、raphics.DrawLine(myPen, 0, 0, 160, 80);ll旋转与缩放旋转与缩放lRotateTransform方用来旋转坐标系方用来旋转坐标系l声明:声明:lpublic void RotateTransform(float angle);l参数:参数:langle为要旋转的角度,以度为单位。为要旋转的角度,以度为单位。lScaleTransform方法用来缩放坐标系方法用来缩放坐标系l声明:声明:lpublic void ScaleTransform(float sx, float sy);l参数参数:lsx为为X方向上缩放因子方向上缩放因子lsy为为Y方向缩放因子。

35、方向缩放因子。例如:例如: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, 100, 50, 100, 40); /填

36、充矩形填充矩形 e.Graphics.ResetTransform();/恢复原是坐标系恢复原是坐标系 /设置放大因子,设置放大因子,X坐标为原来的坐标为原来的0.3倍,倍,Y坐标为原来的坐标为原来的2倍倍 e.Graphics.ScaleTransform(0.3f,2); e.Graphics.FillRectangle(b, 100, 50, 100, 40); /填充矩形填充矩形l对图片实现像素处置对图片实现像素处置l1、 获取位图指定点颜色获取位图指定点颜色lpublic Color GetPixel(int x, int y);l2、设置位图指点点颜色、设置位图指点点颜色l pub

37、lic void SetPixel(int x, int y, Color color);l例如:例如:l/创建新位图,内容为创建新位图,内容为OldImage中的内容。中的内容。Bitmap允许允许对每个像素进展操作对每个像素进展操作l b = new Bitmap(OldImage); l for (int i = 0; i b.Width; i+)l for (int j = 0; j b.Height; j+) Color c1 = b.GetPixel(i, j); /根据原始颜色和轨迹条的值重新生成新颜色根据原始颜色和轨迹条的值重新生成新颜色 Color c2 = Color.FromArg

温馨提示

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

评论

0/150

提交评论