C# GDI+绘图(三)GDI+实现QQ截图类似功能

简介: C# GDI+绘图(三)GDI+实现QQ截图类似功能

前两篇,介绍了GDI+的一些基本用法,现在我们来试着实现一个模仿qq截图的功能来加深一下对GDI+的理解和运用。

首先,我们介绍一下思路:

 聊天窗体上有一个截图按钮,点击按钮后,程序将整个屏幕画在一个新的全屏窗体上,然后显示这个窗体.因为是全屏的窗体,并且隐藏了菜单栏、工具栏等,所以在我们看来就好像是一个桌面的截图,然后在这个新窗体上画矩形,最后保存矩形中的内容并显示在原来的聊天窗体中.

废话不说,先来上一个我的界面截图

其次,我贴出部分主要代码:

Catch页面:

#region 变量
        private Point DownPoint = Point.Empty;//确定绘图起点,按下的坐标
        private bool CatchFinished = false;//是否完成截图
        private bool CatchStart = false;//是否开始截图
        private Bitmap originBmp;//用来保存原始图像
        private Rectangle CatchRect;//用来保存截图的矩形
        #endregion
        public Catch()
        {
            InitializeComponent();
            this.Load += Catch_Load;
            this.MouseClick += Catch_MouseClick;
            this.MouseDown += Catch_MouseDown;
            this.MouseMove += Catch_MouseMove;
            this.MouseUp += Catch_MouseUp;
            this.MouseDoubleClick += Catch_MouseDoubleClick;
        }
        void Catch_Load(object sender, EventArgs e)
        {
            //设置控件样式为双缓冲,以有效减少图片闪烁
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
            this.UpdateStyles();
            originBmp = new Bitmap(this.BackgroundImage);
        }

Main页面:

private void btn_screenShot_Click(object sender, EventArgs e)
        {
            if (cb_hideCurrent.Checked)
          {
            this.Hide();
          }
            Thread.Sleep(1000);
            Catch catchForm = new Catch();
            Bitmap CatchBmp = new Bitmap(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height);
            Graphics g = Graphics.FromImage(CatchBmp);
            g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height));
            catchForm.BackgroundImage = CatchBmp;
            if (catchForm.ShowDialog() == DialogResult.OK)
            {
                IDataObject iData = Clipboard.GetDataObject();
                DataFormats.Format myFormat = DataFormats.GetFormat(DataFormats.Bitmap);
                if (iData.GetDataPresent(DataFormats.Bitmap))
                {
                    richTextBox1.Paste(myFormat);
                    Clipboard.Clear();
                }
                this.Show();
            }
        }

至此,我们就完成了一个模仿QQ截图的功能,完整的项目文件我放在了GUI+绘图实现截屏功能,欢迎大家下载。

或者关注微信公众号IronMarmot,后台回复“截图”即可。

相关文章
|
1月前
|
开发框架 C# iOS开发
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
|
1月前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
2月前
|
监控 前端开发 安全
C#一分钟浅谈:文件上传与下载功能实现
【10月更文挑战第2天】在Web应用开发中,文件的上传与下载是常见需求。本文从基础入手,详细讲解如何在C#环境下实现文件上传与下载。首先介绍前端表单设计及后端接收保存方法,使用`<input type="file">`与`IFormFile`接口;接着探讨错误处理与优化策略,如安全性验证和路径管理;最后讲解文件下载的基本步骤,包括确定文件位置、设置响应头及发送文件流。此外,还提供了进阶技巧,如并发处理、大文件分块上传及进度监控,帮助开发者构建更健壮的应用系统。
146 15
|
2月前
|
开发框架 Cloud Native .NET
10 个 C# 关键字和功能
10 个 C# 关键字和功能
58 8
|
2月前
|
物联网 C#
【C#】简单的蓝牙通讯功能实现
【C#】简单的蓝牙通讯功能实现
51 0
|
2月前
|
C#
如何使用c# 实现断点续传功能
如何使用c# 实现断点续传功能
29 0
|
2月前
|
网络协议 C#
C#:简化版的实现断点续传功能
C#:简化版的实现断点续传功能
36 0
|
4月前
|
编译器 API C#
C# 12 新增功能实操!
C# 12 新增功能实操!
|
4月前
|
C# 图形学
小功能⭐️C#控制小数点后位数的方法
小功能⭐️C#控制小数点后位数的方法
|
4月前
|
前端开发 C# 容器
WPF/C#:实现导航功能
WPF/C#:实现导航功能
92 0