通过C#编写一个简易的Windows截屏增强工具

一、前言

在本篇攻略中,我们将详细讲解如何使用C#编写一个简易的Windows截屏增强工具。该工具可以实现采集屏幕截图、标注图片、保存图片等功能,为用户提供更加便捷的截屏体验。

二、环境准备

在开始编写代码前,我们需要准备如下环境:
- Windows操作系统
- Visual Studio 2019开发环境
- .NET Framework 4.7.2运行库

三、代码实现

  1. 创建窗体

在Visual Studio中新建一个Windows窗体工程,并在窗体中添加一个PictureBox和一个Button控件,如下图所示:

private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Button button1;

private void InitializeComponent()
{
    this.pictureBox1 = new System.Windows.Forms.PictureBox();
    this.button1 = new System.Windows.Forms.Button();
    ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
    this.SuspendLayout();
    // 
    // pictureBox1
    // 
    this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
    this.pictureBox1.Location = new System.Drawing.Point(12, 12);
    this.pictureBox1.Name = "pictureBox1";
    this.pictureBox1.Size = new System.Drawing.Size(500, 300);
    this.pictureBox1.TabIndex = 0;
    this.pictureBox1.TabStop = false;
    // 
    // button1
    // 
    this.button1.Location = new System.Drawing.Point(12, 318);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(75, 23);
    this.button1.TabIndex = 1;
    this.button1.Text = "截屏";
    this.button1.UseVisualStyleBackColor = true;
    this.button1.Click += new System.EventHandler(this.button1_Click);
    // 
    // Form1
    // 
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.ClientSize = new System.Drawing.Size(528, 353);
    this.Controls.Add(this.button1);
    this.Controls.Add(this.pictureBox1);
    this.Name = "Form1";
    this.Text = "截屏增强工具";
    ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
    this.ResumeLayout(false);

}
  1. 实现截屏功能

在button1的Click事件中,我们可以实现截屏功能。

private void button1_Click(object sender, EventArgs e)
{
    // 隐藏窗口
    this.Hide();

    // 截屏
    Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
    Graphics graphics = Graphics.FromImage(bitmap);
    graphics.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);

    // 显示截屏图片
    pictureBox1.Image = bitmap;

    // 显示窗口
    this.Show();
}
  1. 实现图片标注功能

在pictureBox1的MouseMove事件中,我们可以实现图片标注功能。我们在PictureBox中实现一个画笔,并通过鼠标在PictureBox中的移动,来实现画线、画点等操作。

private Point p1, p2;

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        if (p1.IsEmpty)
            p1 = e.Location;
        else
        {
            p2 = e.Location;
            using (Graphics g = Graphics.FromImage(pictureBox1.Image))
            {
                g.DrawLine(Pens.Red, p1, p2);
            }
            pictureBox1.Invalidate();
            p1 = p2;
        }
    }
    else
        p1 = Point.Empty;
}
  1. 实现图片保存功能

在button1的Click事件中,我们可以实现图片保存功能。首先判断pictureBox1.Image是否为null,如果是,则提示用户进行截屏操作;如果不是,则弹出SaveFileDialog,让用户选择保存文件的位置和文件名。用户选择保存后,将pictureBox1.Image保存至指定位置。

private void button1_Click(object sender, EventArgs e)
{
    if (pictureBox1.Image == null)
    {
        MessageBox.Show("请先进行截屏操作");
        return;
    }

    SaveFileDialog dialog = new SaveFileDialog();
    dialog.Filter = "图片文件|*.png";

    if (dialog.ShowDialog() == DialogResult.OK)
    {
        pictureBox1.Image.Save(dialog.FileName);
        MessageBox.Show("保存成功");
    }
}

四、示例演示

  1. 实现截屏功能

点击“截屏”按钮,可以进行截屏操作。截屏后,截屏图片会显示在窗体中的PictureBox中。

  1. 实现图片标注功能

在截屏图片中,移动鼠标并按下鼠标左键不放,可以在截屏图片上画线。如下图所示:

  1. 实现保存功能

点击“保存”按钮,弹出保存对话框,用户选择保存的文件位置和文件名后,点击“保存”按钮即可将截屏图片保存至指定位置。如下图所示:

五、总结

通过以上演示,我们完成了一个简易的Windows截屏增强工具。在实现过程中,我们学习了如何采集屏幕截图、标注图片、保存图片等功能。这对于提高工作效率和便捷使用Windows操作系统,具有重要的意义。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过C#编写一个简易的Windows截屏增强工具 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • C#实体类转换的两种方式小结

    下面我将详细讲解“C#实体类转换的两种方式小结”的完整攻略。 1. 概述 实体类转换是指将一个实体类的对象转换为另一个实体类的对象。在C#中,实体类转换有两种方式,分别是显式转换和隐式转换。在使用实体类转换时,需要注意对象的类型和属性是否一致。 2. 显式转换 显式转换是指通过强制类型转换实现实体类转换的方式。在对实体类进行显式转换时,需要使用“()”括号将…

    C# 2023年5月31日
    00
  • 一文看懂C#中List的扩容机制

    下面来详细讲解一下“一文看懂C#中List的扩容机制”的完整攻略。 1. 背景 在C#中,List是一个非常常用的集合类型。很多人可能会关心List的扩容机制。因为在使用List时,如果不理解List的扩容机制,在添加元素时可能会造成一些性能上的问题。所以本文就来详细讲解一下C#中List的扩容机制。 2. List的扩容机制 在List中,扩容是通过数组的…

    C# 2023年6月1日
    00
  • C#实现简单的loading提示控件实例代码

    下面是详细的讲解。 什么是loading提示控件 loading提示控件是一种在等待数据或操作完成时通知用户的界面元素。通常由一个旋转的图标和一段文本组成,可以自定义显示的文本内容和样式。在网页或软件开发中,经常会使用loading提示控件来提高用户体验。 C#实现loading提示控件的过程 创建一个自定义控件,在控件中添加一个PictureBox和一个L…

    C# 2023年5月15日
    00
  • C#实现目录跳转(TreeView和SplitContainer)的示例代码

    下面是详细讲解“C#实现目录跳转(TreeView和SplitContainer)的示例代码”的完整攻略。 1.示例说明 在实现目录跳转的过程中,我们需要使用到TreeView控件和SplitContainer控件。其中TreeView控件用于显示文件夹和文件结构,SplitContainer控件用于分割窗体,将TreeView控件和文件内容的显示区域分开,…

    C# 2023年6月6日
    00
  • 浅谈c#设计模式之单一原则

    浅谈C#设计模式之单一原则 什么是单一原则 单一原则(Single Responsibility Principle,SRP)指的是一个类或模块只负责完成一个职责或功能。或者说,一个类只应该有一个改变它的理由。 单一原则的优点 降低了代码的复杂度:一个类只负责一个职责,代码也就更加简单明了了,易于维护和测试。 提高了代码的可读性:代码粒度更小、更清晰,易于理…

    C# 2023年5月15日
    00
  • C# Stream 和 byte[] 之间的转换

    在C#中,Stream和byte[]是常用的数据类型,用于读取和写入数据。本文将提供详细的“C#Stream和byte[]之间的转换”的完整攻略,包括如何将Stream转换为byte[],以及如何将byte[]转换为Stream。同时,本文还将提供两个示例,以帮助读者更好地理解如何在C#中进行Stream和byte[]之间的转换。 将Stream转换为byt…

    C# 2023年5月15日
    00
  • C#编程实现取整和取余的方法

    以下是C#编程实现取整和取余的方法的完整攻略。 取整方法 要对数值进行取整操作,可以使用C#内置的Round()方法。该方法有多种重载形式,最常用的是对double和decimal类型的数值进行取整操作。Round()方法的语法如下: Math.Round(double/decimal d); 其中,d表示要进行取整操作的数值。 Round()方法默认的取整…

    C# 2023年6月6日
    00
  • python代码中怎么换行

    Python代码中换行有以下几种方式: 方法一:使用“\” 在Python中,我们可以使用“\”字符来将长代码拆分成多行。在“\”字符后面加上回车符,Python会认为下一行代码是当前行的延续,直到整个表达式结束。例如: a = 1 + 2 + 3 + \ 4 + 5 + 6 + \ 7 + 8 + 9 print(a) # 输出 45 以上代码将长的表达式…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部