开发者

基于C#实现Windows桌面截图功能

目录
  • 前言
  • 知识梳理
    • 实现功能:
    • 实现步骤:
  • 运行效果
    • 代码
      • 主窗体代码
    • 截图编辑窗体
      • 总结
        • 最后

          前言

          • 在学习C# 的过程中,通过案例是比较高效的一种学习方式。下面我将介绍如何使用C#开发一个简单的Windows桌面截图程序。这个程序实现了基本的屏幕截图功能,包括捕获全屏、预览图像以及保存截图文件。通过该案例,可以了解到Windows窗体应用(WinForms)的开发知识,并理解GDI+绘图技术、文件对话框的使用以及事件驱动编程的核心概念。
          • 实现的功能虽然简单,但涵盖了实际开发中的关键流程,如UI设计、功能逻辑实现、异常处理等。

          知识梳理

          实现功能:

          • 1、点击按钮截图。
          • 2、截图显示、拖动缩放、功能。
          • 3、截图保存。

          实现步骤:

          • 1、获取屏幕边界。
          • 2、创建位图对象。
          • 3、屏幕内容捕获
          • 4、内容传递。
          • 5、显示截图编辑器窗口。
          • 核心方法1: Screen.GetBounds(Point)

            • 该方法用于获取主显示器的边界矩形。
            • 一般从屏幕左上角(0,0)开始计算。
          • 核心方法2: CopyFromScreen(Point,Point,Point)

            • 该方法实现屏幕内容拷贝。
            • 参数一:源位置左上角坐标。
            • 参数二:目标位置左上角坐标。
            • 参数三:要拷贝的区域大小。
          • 自定义显示图像窗体: FrmScreenshotEditor

          • 控件代码在文末链接,需要者自行下载。

          运行效果

          基于C#实现Windows桌面截图功能

          代码

          主窗体代码

          • 主窗体中添加截图按钮,实现点击按钮截图功能,在截图前隐藏该窗体主窗体,否则会截到主窗体,添加一定的延时,否则还是会截到主窗体,因为主窗体可能未隐藏成功。截图成功后再显示主窗体和子窗体。
          public partial class MainForm : Form
          {
              public MainForm()
              {
                  InitializeComponent();
                  this.CenterToParent();
                  this.MaximumSize = this.Size;
                  this.MinimumSize = this.Size;
              }
              private void Btn_Screenshot_Click(object sender, EventArgs e)
              {
                  this.Hide();
                  Thread.Sleep(500);
                  Screenshot();
              }
              /// 截图方法
              private void Screenshot()
              {
                  try
                  {
                      // 获取屏幕尺寸
                      Rectangle bounds = Screen.GetBounds(Point.Empty);
                      // 创建位图对象
                      using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
                      {
                          // 创建绘图对象
                          using (Graphics g = Graphics.FromImage(bitmap))
                          {
                              // 将屏幕内容复制到位图中
                              g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
                          }
                          this.Show();
                          //显示图像
                          FrmScreenshotEditor frmScreenshotEditor = new FrmScreenshotEditor();
                          frmScreenshotEditor.Image = bitmap;
                          frmScreenshotEditor.ShowDialog();
                      }
                  }
                  catch (Exception ex)
                  {
                      MessageBox.Show($"截图失败: {ex.Message}", "错误",MessageBoxButtons.OK, MessageBoxIcon.Error);
                  }
              }
          }
          

          截图编辑窗体

          • js截图编辑子窗体中添加自定义图像显示控件,该控件需要实现图像的滚动和缩放功能。添加一个Image属性,用于设置显示的图片。最后添加一个保存按钮,实现图像保存功能。
          public partial class FrmScreenshotEditor :WinFormBase
           {
               public Image Image
               {
                   get => uvCanvas.Image;
                   set
                   {
                       uvCanvas.Image = value;
                       Invalidate();
                   }
               }
               public FrmScreenshotEditor()
               {
                   InitializeComponent();
                   this.CenterToParent();
                   this.WjavascriptindowState = FormWindowState.Maximized;
               }
               private void btn_Save_Click(object sender, System.EventArgs e)
               {
                   SaveFileDialog  saveFileDialog = new SaveFileDialog();
                   saveFileDialog.FileName = "截图1";     //设置初始文件名
                   saveFileDialog.Filter= "PNG Image|*.png|JPEG Image|*.jpg|BMP Image|*.bmp";
                   if (saveFileDialog.ShowDwww.devze.comialog()== DialogResult.OK)
                   {
                       stringandroid extension = Path.GetExtension(saveFileDialog.FileName).ToLower();
                       ImageFormat imageFormat;
                       switch (extension)
                       {
                           case ".png":
                               imageFormat = ImageFormat.Png;
                               break;
                           case ".jpg":
                               imageFormat = ImageFormat.Jpeg;
                               break;
                           case ".bmp":
                               imageFormat = ImageFormat.Bmp;
                               break;
                           default:
                               imageFormat = ImageFormat.Png;
                               break;
                       }
                       try
                       {
                           Image.Save(saveFileDialog.FileName, imageFormat);
                           MessageBox.Show($"图片已成功保存至: {saveFileDialog.FileName}");
                       }
                       catch (Exception ex)
                       {
                           MessageBox.Show($"保存图片时出错: {ex.Message}");
                       }
                   }
               }
           }
          

          总结

          • 通过实现案例学习编程是一种高效的学习方法。这种学习方式将抽象概念具体编程客栈化。通过上面的截图程序,我们实际应用了窗体控件、事件处理、GDI+绘图等核心知识点,比单纯学习理论更容易理解和记忆。
          • 其次通过案例可以获得正向反馈,看到自己编写的代码真正实现功能,极大提升了学习动力和成就感。
          • 最后,该案例后面可以自己扩展性,当你掌握了更多的基础知识后,可以逐步添加区域选择、图像编辑等更高级的功能。

          最后

          以上就是基于C#实现Windows桌面截图功能的详细内容,更多关于C# Windows桌面截图的资料请关注编程客栈(www.devze.com)其它相关文章!

          0

          上一篇:

          下一篇:

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          最新开发

          开发排行榜