在网上可以看到有很多朋友讨论这个工具的做法,其实在c#里实现也不难,主要在于我们要细细的分析,抓图无非就是获取当前屏幕的图片,这样,我们可以取得当前显示的画面,然后放在一个窗体的背景,或者图片空间里,窗体的大小和分辨率取得同样大小,这样的效果就显示的跟屏幕一样。然后再用鼠标在你截取后的窗体上画线,然后在截取你画线部分的图片,这样就达到了你截图的效果,呵呵,是不是觉得很简单?但是做起来不那样简单,算起来有点麻烦。

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();
                    }

中间还有一部分鼠标画线来达到选择要截取图片区域的代码,在这里我就不列了,因为比较杂乱,具体代码我会给你们的,可以在工程里面细细研究。
还有几个小功能,比如放大镜,要截取图片区域选择好后,觉得不合适还可以随便拖动,不足的是拖动时不能改变大小,只能改变位置。都在代码中可以找到。在这里就不罗列了。