时间:2021-05-20
本文是利用C# 开发截图软件的小例子,以供学习分享使用。
思路:
涉及的知识点:
效果图如下【主要实现了截图,保存,复制,画矩形,笔触,荧光笔,橡皮擦等功能】:
保存后图片如下:
-------------------------------------------------------------------------------------------------------------------------------
核心代码如下:
截取屏幕图像:
public Bitmap GetScreen() { //获取整个屏幕图像,不包括任务栏 Rectangle ScreenArea = Screen.GetWorkingArea(this); Bitmap bmp = new Bitmap(ScreenArea.Width, ScreenArea.Height); using (Graphics g = Graphics.FromImage(bmp)) { g.CopyFromScreen(0, 0, 0, 0, new Size(ScreenArea.Width,ScreenArea.Height)); } return bmp; }绘制图形功能:
#region 绘制功能 protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe); Graphics g = pe.Graphics; DrawHistory(g); //绘制当前线 if (startDraw && this.curLine.PointList != null && this.curLine.PointList.Count > 0) { DrawLine(g,this.curLine); } if (startDraw && this.curRect.Start != null && this.curRect.End != null && this.curRect.Start != this.curRect.End) { DrawRectangle(g, this.curRect); } } public void DrawHistory(Graphics g) { //绘制线历史记录 if (LineHistory != null) { foreach (HLine lh in LineHistory) { if (lh.PointList.Count > 10) { DrawLine(g, lh); } } } //绘制矩形历史记录 if (RectHistory != null) { foreach (HRectangle lh in RectHistory) { if (lh.Start!=null&& lh.End!=null && lh.Start!=lh.End) { DrawRectangle(g, lh); } } } } /// <summary> /// 绘制线 /// </summary> /// <param name="g"></param> /// <param name="line"></param> private void DrawLine(Graphics g,HLine line) { g.SmoothingMode = SmoothingMode.AntiAlias; using (Pen p = new Pen(line.LineColor, line.LineWidth)) { //设置起止点线帽 p.StartCap = LineCap.Round; p.EndCap = LineCap.Round; //设置连续两段的联接样式 p.LineJoin = LineJoin.Round; g.DrawCurve(p, line.PointList.ToArray()); //画平滑曲线 } } /// <summary> /// 绘制矩形 /// </summary> /// <param name="g"></param> /// <param name="rect"></param> private void DrawRectangle(Graphics g, HRectangle rect) { g.SmoothingMode = SmoothingMode.AntiAlias; using (Pen p = new Pen(rect.LineColor, rect.LineWidth)) { //设置起止点线帽 p.StartCap = LineCap.Round; p.EndCap = LineCap.Round; //设置连续两段的联接样式 p.LineJoin = LineJoin.Round; g.DrawRectangle(p, rect.Start.X, rect.Start.Y, rect.End.X - rect.Start.X, rect.End.Y - rect.Start.Y); //画平滑曲线 } } public void Earser(Point p0) { for (int i = lineHistory.Count - 1; i >= 0; i--) { HLine line = lineHistory[i]; bool flag = false; foreach (Point p1 in line.PointList) { double distance = GetDistance(p0, p1); if (Math.Abs(distance) < 6) { //需要删除 flag = true; break; } } if (flag) { lineHistory.RemoveAt(i); } } //擦除矩形 for (int i = rectHistory.Count - 1; i >= 0; i--) { HRectangle rect = rectHistory[i]; if (p0.X>rect.Start.X && p0.X<rect.End.X && p0.Y > rect.Start.Y && p0.Y < rect.End.Y) { rectHistory.RemoveAt(i); } } } /// <summary> /// 获取两点之间的距离 /// </summary> /// <param name="p0"></param> /// <param name="p1"></param> /// <returns></returns> private double GetDistance(Point p0, Point p1) { return Math.Sqrt(Math.Pow((p0.X - p1.X), 2) + Math.Pow((p0.Y - p1.Y), 2)); } #endregion以下是源码功能连接,需要的朋友可以自行下载。
源码链接
以上所述是小编给大家介绍的C# 实现截图软件功能实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了C#实现简单屏幕监控的方法。分享给大家供大家参考。具体如下:这是一段C#编写的屏幕监控代码,可以自动对屏幕进行截图,软件自身隐藏usingSyst
本文实例讲述了C#实现的滚动网页截图功能。分享给大家供大家参考,具体如下:usingSystem;usingSystem.Collections.Generic
本文实例讲述了C#实现DevGrid拖拽移动行的方法。分享给大家供大家参考。具体如下:完整实例代码点击此处本站下载。拖拽时带行截图效果实现代码如下://////
本文实例为大家分享了C#实现QQ截图工具的具体代码,供大家参考,具体内容如下下面就具体介绍下实现截图工具的实现思路。为了让大家更清楚地知道如何去实现自己的截图工
本文实例讲述了C#实现在网页中根据url截图并输出到网页的方法。分享给大家供大家参考,具体如下:网页截图是很多站点的一个小需求,这段代码实现的是如何根据url获