c#如何实现QQ截图功能

  介绍

这篇文章主要讲解了c#如何实现QQ截图功能,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

对于QQ截的图,肯定是早就有认识了,只是一直没有去认真观察这个操作的具体实现步骤,所以这里将自己的记忆中的步骤简单的写一下:

习惯性用QQ或者蒂姆的人,一般是使用Ctrl + Alt + A 快捷键(热键)快速实现截的图。

    <李> Ctrl + Alt + A 李进入截图模式 <李>鼠标左键点击 <李>鼠标拖动对截图去进行选取李 <李>鼠标左键弹起李 <李>双击截图区域,保存图片到剪贴板 <李>鼠标右键点击 <李>退出截图模式

 C #如何实现QQ截图功能

因为考虑到截图模式的时候,一般只能显示一个窗体,所以就考虑使用单例模式,在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截图功能