介绍
这篇文章主要讲解了c#如何实现QQ截图功能,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
对于QQ截的图,肯定是早就有认识了,只是一直没有去认真观察这个操作的具体实现步骤,所以这里将自己的记忆中的步骤简单的写一下:
习惯性用QQ或者蒂姆的人,一般是使用Ctrl + Alt + A 快捷键(热键)快速实现截的图。
- <李> Ctrl + Alt + A 李进入截图模式> <李>鼠标左键点击李> <李>鼠标拖动对截图去进行选取李> <李>鼠标左键弹起李> <李>双击截图区域,保存图片到剪贴板李> <李>鼠标右键点击李> <李>退出截图模式李>
因为考虑到截图模式的时候,一般只能显示一个窗体,所以就考虑使用单例模式,在ScreenBody窗体中实现以下代码
1:创建单例,
私有静态ScreenBody ScreenBody=零;
2:私有化构造函数
私人ScreenBody () { InitializeComponent (); }
3:创建静态方法
私有静态ScreenBody GetSingle () { 如果(screenBody==null) { screenBody=new screenBody (); } 返回screenBody; }
进一步讨论一下在主窗体中的调用,主要中添加了一个按钮命名为btnCutter
私人bool CatchStart;//判断鼠标是否按下 私人bool CatchFinished;//判断矩形是否绘制完成 私人点DownPoint;//鼠标按下的点 私人形象技术;//最基本的图片 私人矩形CatchRectangle;
<强>必须要实现的那几个事件强>
鼠标按下MouseDown
私人空ScreenBody_MouseMove(对象发送方,MouseEventArgs e) {//确保截图开始 如果(CatchStart) {//新建一个图片,让它与屏幕图片相同 位图copyBmp=(位图)baseMap.Clone ();//鼠标按下时的坐标 点newPoint=new点(DownPoint。X, DownPoint.Y);//新建画板和画笔 图g=Graphics.FromImage (copyBmp); 笔p=新钢笔(颜色。Azure, 1);//画笔的颜色为Azure宽度为1//获取矩形的长度 int宽度=Math.Abs (e。X - DownPoint.Y); int高度=Math.Abs (e。Y - DownPoint.Y); 如果(e。X & lt;DownPoint.X) { newPoint。X=e.X; } 如果(e。Y & lt;DownPoint.Y) { newPoint。Y=e.Y; } CatchRectangle=new矩形(newPoint,新的大小(宽度、高度)); g。DrawRectangle (p, CatchRectangle);//释放目前的画板 g.Dispose (); p.Dispose ();//从当前窗体创建新的画板 图形g1=this.CreateGraphics ();//将刚刚所画的图片画到截图窗体上去//为什么不直接在当前窗体画图呢? ? ?//如果直接解决将矩形画在窗体上,会造成图片抖动而且有多个矩形//这样实现也属于二次缓冲技术 g1。DrawImage (copyBmp新的点(0,0)); g1.Dispose ();//释放拷贝图片防止内存被大量的消耗 copyBmp.Dispose (); }
鼠标弹起Mouseup
///& lt; summary>///鼠标左键弹起事件///& lt;/summary>///& lt;参数name=皊ender"祝辞& lt;/param>///& lt;参数name=癳"祝辞& lt;/param> 私人空间ScreenBody_MouseUp(对象发送方,MouseEventArgs e) { 如果(e。按钮==MouseButtons.Left) {//如果截图已经开始,鼠标左键弹起设置截图完成 如果(CatchStart) { CatchStart=false; CatchFinished=true; } } }c#如何实现QQ截图功能