在网上可以看到有很多朋友讨论这个C#截图工具的做法,其实在c#里实现也不难,主要在于我们要细细的分析,抓图无非就是获取当前屏幕的图片,这样,我们可以取得当前显示的画面,然后放在一个窗体的背景,或者图片空间里,窗体的大小和分辨率取得同样大小,这样的效果就显示的跟屏幕一样。然后再用鼠标在你截取后的窗体上画线,然后在截取你画线部分的图片,这样就达到了你截图的效果,呵呵,是不是觉得很简单?但是做起来不那样简单,算起来有点麻烦。
我在这里还多加了个热键注册功能,以方便使用,
当前的热键和QQ的截图热键一样。这里你可以设置你喜欢的热键。
下面来看看主要部分的代码,获取当前屏幕的图片一下代码可以实现。
public Bitmap getScreenImage() { Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width,Screen.PrimaryScreen.Bounds.Height); Graphics gp = Graphics.FromImage(bmp); gp.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size); gp.Dispose(); return bmp; }
这里主要用到了一个graphics类,这个类主要就是对图片的一些操作。
然后在窗体加载时调用,就可以获取当前屏幕的背景
下面就是鼠标双击获取你选择好的取图区,然后保存。
Bitmap bmp = new Bitmap(pictureWidth, pictureheight); Graphics gp = Graphics.FromImage(bmp); this.pictureBox1.Refresh(); gp.CopyFromScreen(StartPoint.X, StartPoint.Y, 0, 0, new Size(pictureWidth, pictureheight)); SaveFileDialog sd = new SaveFileDialog(); sd.Filter = "jpg文件(*.jpg)|*.jpg|bmp文件 (*.bmp)|*.bmp"; sd.FileName = "*.jpg"; DialogResult result = sd.ShowDialog(); if (result == DialogResult.Cancel) { return; } else { bmp.Save(sd.FileName); Clipboard.SetImage(bmp); if (this.VisibleEvent != null) { VisibleEvent(); } this.Close(); }
中间还有一部分鼠标画线来达到选择要截取图片区域的代码,在这里我就不列了,因为比较杂乱,具体代码我会给你们的,可以在工程里面细细研究。
还有几个小功能,比如放大镜,要截取图片区域选择好后,觉得不合适还可以随便拖动,不足的是拖动时不能改变大小,只能改变位置。都在代码中可以找到。在这里就不罗列了。
最新评论