当前位置: 首页 > article >正文

C# 实用工具分享(1)

大家好,今天分享一些在开发过程中比较实用的工具。

首先在软件开发的过程中不可避免的要使用截图这样的功能,以前这样的功能我自己也是选择开发出新功能。但是自己开发还是非常费时费力的,并且效果也不一定特别好。

于是我找到了一个现成的截图功能。

如下所示:名字为screencapturer

这个软件的使用方法如下:

 private void button1_Click(object sender, EventArgs e)
        {
            ScreenCapturer.ScreenCapturerTool screen = new ScreenCapturer.ScreenCapturerTool();
            if (screen.ShowDialog()==DialogResult.OK)
            {
                Bitmap bmp = (Bitmap)screen.Image;
                pictureBox1.BackgroundImage = bmp;
            }

        }

使用的效果如下图所示:

这个截图中有以下功能:

画框:

可以切换总共16种颜色的框线用来进行画框标注。

也可以画椭圆:

和画框一样也可以切换总共16种颜色的框线用来进行椭圆标注。

不每个都介绍了,大家可以自己体会其他的功能。

截图软件的使用描述:

Library for fast screenshot make and screen capture based on SharpDX package.

使用过程中也发现了了一些问题,首先就是这个截图软件只能满足一个屏幕的截屏,也就是只可以主屏幕使用,第二个屏幕无法使用截图。还有就是在截图以后,影响其他软件使用,无法直接进行软件缩小。只能通过切换才能处理这个问题。

如果是自己开发一个截图功能,也需要考虑一些事情:

例如:

1、界面信息刷新,会造成窗口一直抖动,这样的问题需要先将操作记录到内存里,然后一起刷新到前端界面上。

用画框来举个例子:

 // 获取鼠标按下的坐标
            Point newPoint = new Point(startPoint.X, startPoint.Y);
            // 新建画板和画笔
            Graphics g = Graphics.FromImage(copyBmp);
            Pen p = new Pen(Color.Red, 1);
            // 获取矩形的长宽
            width = Math.Abs(startPoint.X - e.X);
            height = Math.Abs(startPoint.Y - e.Y);
            if (startPoint.X < e.X)
            {
                recX = startPoint.X;
                newPoint.X = startPoint.X;
            }
            else
            {
                recX = startPoint.X - width;
                newPoint.X = startPoint.X - width;
            }
            if (startPoint.Y < e.Y)
            {
                recY = startPoint.Y;
                newPoint.Y = startPoint.Y;
            }
            else
            {
                recY = startPoint.Y - height;
                newPoint.Y = startPoint.Y - height;
            }
            Rectangle CatchRectangle = new Rectangle(newPoint, new Size(width, height));
            // 将矩形画在画板上
            g.DrawRectangle(p, CatchRectangle);
            // 释放目前的画板
            g.Dispose();
            p.Dispose();
            // 从当前窗体创建新的画板
            Graphics g1 = this.CreateGraphics();
            // 将刚才所画的图片画到截图窗体上
            // 为什么不直接在当前窗体画图呢?
            // 如果自己解决将矩形画在窗体上,会造成图片抖动并且有无数个矩形
            // 这样实现也属于二次缓冲技术
            g1.DrawImage(copyBmp, new Point(0, 0));
            g1.Dispose();
            // 释放拷贝图片,防止内存被大量消耗
            copyBmp.Dispose();
            Pen pen = new Pen(Color.Red, 2);
            pen.DashPattern = new float[] { 1, 2 };
            pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
            main_g.DrawRectangle(pen, recX, recY, width, height);
            string ss = $"{width}×{height}";
            main_g.DrawString(ss, new Font("宋体", 12, FontStyle.Bold), Brushes.Green, new Point(e.X, e.Y));

今天要讲的就是这么多,我们下篇文章再见。


http://www.kler.cn/a/461182.html

相关文章:

  • 简单使用linux
  • 2025考研江南大学复试科目控制综合(初试807自动控制原理)
  • 基于深度学习算法的AI图像视觉检测
  • 学习C++:数组
  • 如何使用axios实现并发请求
  • Dubbo 核心知识全解析:原理、流程与关键机制
  • 数据库数据类型对比
  • uniapp——App下载文件,保存、打开文件(二)
  • 王佩丰24节Excel学习笔记——第二十三讲:饼图美化与PPT图表
  • ubuntu查看当前哪些进程在使用网络流量(好用的方法)
  • R语言6种将字符转成数字的方法,写在新年来临之际
  • 第17篇 使用数码管实现计数器___ARM汇编语言程序<四>
  • cad学习 day12客餐厅立面
  • 金融租赁系统助力企业转型与市场竞争力提升
  • 如何通过HTTP API更新Doc
  • 区块链技术在电商API接口中的应用探索与前景分析
  • 17000.机器学习-数字1-9实例
  • WPF使用OpenCvSharp4
  • 矩阵的因子分解2-满秩分解
  • PHP+Redis的基本操作方法
  • 动态吸震器在汽车降噪中的创新应用——电磁正反馈调节系统
  • 【机器学习篇】从新手探寻到算法初窥:数据智慧的开启之门
  • sql特殊查询记录
  • uniapp - 小程序实现摄像头拍照 + 水印绘制 + 反转摄像头 + 拍之前显示时间+地点 + 图片上传到阿里云服务器
  • 线性代数期末复习 [基础篇]
  • Three.js教程004:坐标辅助器与轨道控制器