首页 > 编程语言 >C# 实用工具分享(1)

C# 实用工具分享(1)

时间:2024-12-28 18:02:13浏览次数:6  
标签:截图 C# 实用工具 height width newPoint new 分享 startPoint

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

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

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

如下所示:名字为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));

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

标签:截图,C#,实用工具,height,width,newPoint,new,分享,startPoint
From: https://blog.csdn.net/m0_53104033/article/details/143987068

相关文章

  • 学习012-02-03-14 How to: Reorder an Action Container‘s Actions Collection(如何:对
    Howto:ReorderanActionContainer’sActionsCollection(如何:对操作容器的操作集合进行重新排序)InanXAFapplicationUI,ActionsarelocatedwithinActionContainers.YoucanusetheActionBase.CategorypropertyandtheApplicationModel’sActionDesign......
  • WPF DrawingImage DrawingGroup Geometry in 2D acted as 3D
    <Windowx:Class="WpfApp102.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • c语言书籍排序 多数组协同排序 按价格排序【书名同步】 带有空格的字符串读取
    题目:编写程序,从键盘输入n(n<10)本书的名称和定价并存入结构数组中,按单价从小到大排序并输出排序后的书籍信息。输入输出示例:括号内为说明,无需输入输出输入样例:3(n=3)ProgramminginC21.5ProgramminginVB18.5ProgramminginDelphi20输出样例:Programmingin......
  • Ceph存储
    第一章:存储概念介绍什么是存储storage简单来说,存储就是存放数据的介质,我们平时最常见的存储就是U盘、移动硬盘、笔记本使用的机械或固态硬盘等等。在服务器领域,为了数据的安全性,业务数据一般要与系统分开而且重要的业务数据一般是通过某种共享技术(nfs)挂载到远程存储上的......
  • 王佩丰24节Excel学习笔记——第二十二讲:制作甘特图与动态甘特图
    【以Excel2010系列学习,用OfficeLTSC专业增强版2021实践】【本章技巧】插入图表,针对每一个图表上的元素,都可以选中选右键进行修改数据;本章中的向两端延伸,设置数据的原理;数据格式的显示方式,此处用来处理坐标轴的正负值的显示;图表的背景填充方法,处理图片的方法,使用艺术......
  • AIGC安全测试用例与代码
    提示词请以上结合业务需求,生成接口安全测试用例#角色:渗透测试专家#简介:专门从事安全渗透测试的专业人士,具备丰富的行业知识和测试经验,能够全面分析和评估系统的安全性。#技能:-渗透测试-漏洞扫描-安全评估-报告撰写-行业标准遵循#规则:-确保测试过程的合法性......
  • 王佩丰24节Excel学习笔记——第二十一讲:经典Excel动态图表实现原理
    【以Excel2010系列学习,用OfficeLTSC专业增强版2021实践】【本章技巧】使用公式记得要绝对引用;定义好的名称,引用时要使用文件名+!+定义名,不能写错,否则无结果;利用offset函数解决数据透视表做好后,原数据值添加了数据,导致数据透视表无法更新问题。记住这个公式,取数据透......
  • Rust和C/C++相关调用总结
    一.Windows下Rust与C/C++互相调用1.C/C++调用rust1.1动态库调用1.1.1以LoadLibrary方式显示调用add.rs#[no_mangle]//防止Rust修改函数名pubextern"C"fnhello_world(){println!("HellofromRust!");}#[no_mangle]pubextern"C"fnadd(a:i32,b:i3......
  • STM32单片机芯片与内部48 CAN 数据手册 寄存器
    目录一、CAN控制和状态寄存器1、CAN主控制寄存器(CAN_MCR)2、CAN主状态寄存器(CAN_MSR)3、CAN发送状态寄存器(CAN_TSR)4、CAN接收FIFO0寄存器(CAN_RF0R)5、CAN接收FIFO1寄存器(CAN_RF1R)6、CAN中断使能寄存器(CAN_IER)7、CAN错误状态寄存器(CAN_ESR)8、CAN位......
  • STM32单片机芯片与内部49 CAN双机通讯 标准库 HAL库
    目录一、CAN通讯——标准库1、CAN_InitTypeDef2、CAN_FilterInitTypeDef3、GPIO4、NVIC5、CAN接收6、CAN发送7、中断服务函数8、CAN_DEBUG_ARRAY二、CAN通讯——HAL库1、CAN_HandleTypeDef2、CAN_FilterConfTypeDef3、GPIO4、NVIC5、CAN接收6、CAN发送7、中断......