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.mzph.cn/news/891377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

积分图(Integral Image)与均值滤波的快速实现

积分图&#xff08;Integral Image&#xff09;也称为求和图&#xff08;Summed Area Table&#xff09;&#xff0c;是一种用于快速计算图像中任意矩形区域像素值总和的技术。 基本概念 积分图的每个位置(i, j)存储的是从图像左上角(1, 1)到当前位置(i, j)所有像素值的累积和…

curl+openssl 踩坑笔记

curl编译&#xff1a;点击跳转 踩坑一 * SSL certificate problem: unable to get local issuer certificate * closing connection #0 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.se/docs/sslcerts.html …

[AI] 深度学习的“黑箱”探索:从解释性到透明性

目录 1. 深度学习的“黑箱”问题&#xff1a;何为不可解释&#xff1f; 1.1 为什么“黑箱”问题存在&#xff1f; 2. 可解释性研究的现状 2.1 模型解释的方法 2.1.1 后置可解释性方法&#xff08;Post-hoc Explanations&#xff09; 2.1.2 内在可解释性方法&#xff08;I…

python-Flask:SQLite数据库路径不正确但是成功访问到了数据库,并对表进行了操作

出现了这个问题&#xff0c;就好像是我要去找在南方的人&#xff0c;然后我刚好不分南北&#xff0c;我认为的方向错了&#xff0c;实则方向对了。 在我针对复盘解决&#xff1a;sqlite3.OperationalError: unrecognized token: “{“-CSDN博客这个内容的时候&#xff0c;又出现…

对称密码算法(分组密码算法 序列密码算法 密码杂凑算法)中的基本操作

对称密码算法(分组密码算法 序列密码算法 密码杂凑算法)中的基本操作 相比非对称加密算法&#xff0c;对称加密算法因为加解密效率较高&#xff0c;因而在日常使用中更加广泛。为了让大家更加熟悉常见的对称加密算法&#xff0c;本文列举出了对称密码算法设计中经常用到的13种基…

大数据治理,数字化转型运营平台建设方案(PPT完整版)

1、大数据治理整体运营思路 2、数据资产定义及流程规范 3、治理规范及质量管控 4、质量考核标准及提升方案 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划…

专题十四——BFS

目录 一BFS解决FloodFill算法 1图像渲染 2岛屿数量 3岛屿的最大面积 4被环绕的区域 二BFS解决蛋源最短路径问题 1迷宫中离入口最近的出口 2最小基因变化 3单词接龙 4为高尔夫比赛砍树 三BFS解决多源最短路径问题 1 01矩阵 2飞地的数量 3地图中的最高点 4地图分…

DMDRS部署:搭建DM8-DM8数据同步

一、部署要求 1.1 硬件要求 DMDRS服务描述源DMDRS 内存要求至少2GB的内存空间。推荐配置4GB及以上的内存空间。 源DMDRS对内存空间的需求主要与装载的并发数相关。当内存空间配置低于2GB时&#xff0c;可以调整装载的线程数来降低源DMDRS对内存空间的需求。 磁盘要求至少10GB…

仓颉笔记——windows11安装启用cangjie语言,并使用vscode编写“你好,世界”

2025年1月1日第一篇日记&#xff0c;大家新年好。 去年就大致看了一下&#xff0c;感觉还不错&#xff0c;但一直没上手&#xff0c;这次借着元旦的晚上安装了一下&#xff0c;今年正式开动&#xff0c;公司众多的应用国产化正等着~~ 第一步&#xff1a;准备 官网&#xff1a;…

datalist的作用?怎么用的?

在 HTML 中&#xff0c;<datalist> 元素用于为 <input> 元素提供一个可选项列表&#xff0c;帮助用户通过预定义的选项进行快速选择。它是一个增强输入体验的功能&#xff0c;类似于自动完成&#xff08;autocomplete&#xff09;&#xff0c;但与传统的 <selec…

Cocos2dx Lua绑定生成中间文件时参数类型与源码类型不匹配

这两天维护的一个项目&#xff0c;使用arm64-v8a指令集编译时遇到了报错&#xff0c;提示类型不匹配&#xff0c;具体报错的代码【脚本根据C源文件生成的中间文件】如下&#xff1a; const google::protobuf::RepeatedField<unsigned long long>& ret cobj->equi…

1、ELK的架构和安装

ELK简介 elk&#xff1a;elasticsearch logstash kibana&#xff0c;统一日志收集系统。 elasticsearch&#xff1a;分布式的全文索引引擎的非关系数据库&#xff0c;json格式&#xff0c;在elk中存储所有的日志信息&#xff0c;架构有主和从&#xff0c;最少需要2台。 …

常用的数据库类型都有哪些

在Java开发和信息系统架构中&#xff0c;数据库扮演着存储和管理数据的关键角色。数据库种类繁多&#xff0c;各有特色&#xff0c;适用于不同的应用场景。 1. 关系型数据库&#xff08;RDBMS&#xff09;&#xff1a; • 关系型数据库是最为人熟知的数据库类型&#xff0c;数据…

百度贴吧的ip属地什么意思?怎么看ip属地

在数字化时代&#xff0c;IP地址不仅是网络设备的唯一标识符&#xff0c;更承载着用户的网络身份与位置信息。百度贴吧作为广受欢迎的社交平台&#xff0c;也遵循相关规定&#xff0c;在用户个人主页等位置展示账号IP属地信息。那么&#xff0c;百度贴吧的IP属地究竟意味着什么…

微服务篇-深入了解 XXL-JOB 分布式任务调度的具体使用(XXL-JOB 的工作流程、框架搭建)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 XXL-JOB 调度中心概述 1.2 XXL-JOB 工作流程 1.3 Cron 表达式调度 2.0 XXL-JOB 框架搭建 2.1 XXL-JOB 调度中心的搭建 2.2 XXL-JOB 执行器的搭建 2.3 使用调度中心…

Unity Shader TexelSize的意义

TexelSize在制作玻璃折射效果时会用到。 // Get the normal in tangent space fixed3 bump UnpackNormal(tex2D(_BumpMap, i.uv.zw)); // Compute the offset in tangent space float2 offset bump.xy * _Distortion * _RefractionTex_TexelSize.xy; i.scrPos.xy offset * i…

Python面向对象进阶

思维导图 Python面向对象进阶的思维导图 私有权限 私有属性 为了更好的限制属性的访问和包含隐私&#xff0c;可以给属性设置私有权限。 当把属性设置为私有属性后&#xff0c;则该属性只能被本类直接访问。 定义私有属性语法&#xff1a; 设置和获取私有属性值语法&…

Github 正常访问但是ping不同也无法进行git操作

Github 正常访问但是ping不同也无法进行git操作 原因&#xff1a;在git push 的时候 发现一直push不上去。 $ git push interview master ssh: connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository.Please make sure yo…

基于Springboot + vue实现的夕阳红公寓管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

gesp(C++二级)(16)洛谷:B4037:[GESP202409 二级] 小杨的 N 字矩阵

gesp(C++二级)(16)洛谷:B4037:[GESP202409 二级] 小杨的 N 字矩阵 题目描述 小杨想要构造一个 m m m \times m m