首页后端开发ASP.NETC# 实现截图功能的操作实例

C# 实现截图功能的操作实例

时间2024-01-30 11:44:03发布访客分类ASP.NET浏览684
导读:收集整理的这篇文章主要介绍了C# 实现截图功能的操作实例,觉得挺不错的,现在分享给大家,也给大家做个参考。本文是利用C# 开发截图软件的小例子,以供学习分享使用。思路:截取屏幕图片。获取要截取的范围,即左上角,右下角坐标填充到Picture...
收集整理的这篇文章主要介绍了C# 实现截图功能的操作实例,觉得挺不错的,现在分享给大家,也给大家做个参考。本文是利用C# 开发截图软件的小例子,以供学习分享使用。

思路:

  1. 截取屏幕图片。

  2. 获取要截取的范围,即左上角,右下角坐标

  3. 填充到PictureBox中。

  4. 笔触功能,荧光笔,矩形,橡皮擦,复制,保存功能

涉及的知识点:

  • MenuStrip:为窗体提供菜单系统。以ToolStripMenuITem为菜单子选项

  • ToolStrip:为 Windows 工具栏对象提供容器。以ToolStripButton【表示包含文本和图像的可选】为工具栏子元素

  • PictureBox:表示用于显示图像的 Windows 图片框控件。不过本文对此空间进行了重写

  • Screen:可用于获取工作屏幕区域

  • Graphics:封装一个 GDI+ 绘图图面。此类不能被继承。此类的CopyFromScreen方法用于获取屏幕图像

  • 鼠标事件:包括MouseDown,MouSEMove,MouseUp事件,通过MouseEventargs中的Location获取鼠标的位置。

  • Clipboard: 提供将数据置于系统剪贴板中以及从中检索数据的方法。此类不能被继承。

  • Cursor:设置鼠标的显示的光标的样式。

  • OnPaint:重绘事件,当控件刷新时响应此事件。

效果图如下【主要实现了截图,保存,复制,画矩形,笔触,荧光笔,橡皮擦等功能】:

保存后图片如下:

-------------------------------------------------------------------------------------------------------------------------------

核心代码如下:

截取屏幕图像:

 1 public Bitmap GetScreen() 2         {
     3             //获取整个屏幕图像,不包括任务栏 4             Rectangle ScreenArea = Screen.GetWorkingArea(this);
     5             Bitmap bmp = new Bitmap(ScreenArea.Width, ScreenArea.Height);
 6             using (Graphics g = Graphics.FromImage(bmp)) 7             {
     8                 g.CopyFromScreen(0, 0, 0, 0, new Size(ScreenArea.Width,ScreenArea.Height));
 9             }
    10             return bmp;
11         }
    
View Code

绘制图形功能:

  1 #region 绘制功能  2   3         PRotected override void OnPaint(PaintEventArgs PE)  4         {
      5             base.OnPaint(pe);
      6             Graphics g = pe.Graphics;
      7             DrawHistory(g);
      8             //绘制当前线  9             if (startDraw &
    &
     this.curLine.PointList != null &
    &
     this.curLine.PointList.Count >
 0) 10             {
     11                 DrawLine(g,this.curLine);
 12             }
     13             if (startDraw &
    &
     this.curRect.Start != null &
    &
     this.curRect.End != null &
    &
 this.curRect.Start != this.curRect.End) {
     14                 DrawRectangle(g, this.curRect);
 15             }
 16         }
 17  18         public void DrawHistory(Graphics g) {
 19             //绘制线历史记录 20             if (LineHistory != null) 21             {
 22                 foreach (HLine lh in LineHistory) 23                 {
     24                     if (lh.PointList.Count >
 10) 25                     {
     26                         DrawLine(g, lh);
 27                     }
 28                 }
 29             }
 30             //绘制矩形历史记录 31             if (RectHistory != null) 32             {
 33                 foreach (hrectangle lh in RectHistory) 34                 {
     35                     if (lh.Start!=null&
    &
     lh.End!=null &
    &
 lh.Start!=lh.End) 36                     {
     37                         DrawRectangle(g, lh);
 38                     }
 39                 }
 40             }
 41         }
     42  43         /// summary>
     44         /// 绘制线 45         /// /summary>
     46         /// param name="g">
    /param>
     47         /// param name="line">
    /param>
 48         private void DrawLine(Graphics g,HLine line) {
     49             g.SmoothingMode = SmoothingMode.AntiAlias;
 50             using (Pen p = new Pen(line.LineColor, line.LineWidth)) 51             {
     52                 //设置起止点线帽   53                 p.StartCap = LineCap.Round;
     54                 p.EndCap = LineCap.Round;
     55  56                 //设置连续两段的联接样式   57                 p.LineJoin = LineJoin.Round;
     58                 g.DrawCurve(p, line.PointList.ToArray());
 //画平滑曲线   59             }
 60         }
     61  62         /// summary>
     63         /// 绘制矩形 64         /// /summary>
     65         /// param name="g">
    /param>
     66         /// param name="rect">
    /param>
 67         private void DrawRectangle(Graphics g, HRectangle rect) 68         {
     69             g.SmoothingMode = SmoothingMode.AntiAlias;
 70             using (Pen p = new Pen(rect.LineColor, rect.LineWidth)) 71             {
     72                 //设置起止点线帽   73                 p.StartCap = LineCap.Round;
     74                 p.EndCap = LineCap.Round;
     75  76                 //设置连续两段的联接样式   77                 p.LineJoin = LineJoin.Round;
     78                 g.DrawRectangle(p, rect.Start.X, rect.Start.Y, rect.End.X - rect.Start.X, rect.End.Y - rect.Start.Y);
 //画平滑曲线   79             }
 80         }
 81  82         public void Earser(Point p0) 83         {
     84             for (int i = lineHistory.Count - 1;
     i >
    = 0;
 i--) 85             {
     86                 HLine line = lineHistory[i];
     87                 bool flag = false;
 88                 foreach (Point p1 in line.PointList) 89                 {
     90                     double distance = GetDistance(p0, p1);
 91                     if (Math.Abs(distance)  6) 92                     {
     93                         //需要删除 94                         flag = true;
     95                         break;
 96                     }
 97  98                 }
 99                 if (flag)100                 {
    101                     lineHistory.RemoveAt(i);
102                 }
103             }
    104             //擦除矩形105             for (int i = rectHistory.Count - 1;
     i >
    = 0;
 i--)106             {
    107                 HRectangle rect = rectHistory[i];
    108                109                 if (p0.X>
    rect.Start.X &
    &
     p0.Xrect.End.X &
    &
     p0.Y >
     rect.Start.Y &
    &
 p0.Y  rect.End.Y) {
    110                    111                     rectHistory.RemoveAt(i);
112                 }
113             }
114         }
    115  116         /// summary>
    117         /// 获取两点之间的距离118         /// /summary>
    119         /// param name="p0">
    /param>
    120         /// param name="p1">
    /param>
    121         /// returns>
    /returns>
122         private double GetDistance(Point p0, Point p1) {
    123             return Math.Sqrt(Math.Pow((p0.X - p1.X), 2) + Math.Pow((p0.Y - p1.Y), 2));
124         }
    125 126         #endregion
View Code

以上就是C# 实现截图功能的操作实例的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

.netcsharp功能截图软件

若转载请注明出处: C# 实现截图功能的操作实例
本文地址: https://pptw.com/jishu/592476.html
javascript怎么实现反转字符串 使用ConcurrentDictionary多线程同步字典集合实例详解

游客 回复需填写必要信息