写在前面:有没有想过屏幕捕捉是很简单的事情?至少,在.Net上面,是很简单的事情,还有一个方法专门提供了这个功能,它就是CopyFromScreen方法,是Graphics的实例的一个方法,可以将当前屏幕上面的指定区域捕捉下来。如果对这个功能做进一步的扩展,很容易就可以做出一个像红蜻蜓一样的屏幕捕捉工具,当然,专业水平肯定还不及人家的产品的。
效果图
效果图中显示有多个控件,其中重要的是名为“捕捉屏幕”的按钮,三组数据的输入框和一个显示图形的盒子(PictureBox),实现的原理是,先指定要捕捉的位置和捕捉的大小,新建一个这样大小的空的图像(Bitmap),然后,从Bitmap中提取出Graphics的实例,使用这个实例,调用CopyFromScreen方法获取抓取屏幕中的图形区域,这样,Bitmap中就有图形了。再将Bitmap放入PictureBox显示就可以了。注意,输入的X轴,Y轴,大小的数据都必须是数字,下面的程序中,并没有处理错误输入的情况,输入后,点击“捕捉屏幕”就能够显示图片了。
源代码
下面代码的关键是Graphics.FromImage和CopyFromScreen方法,前者表示从指定的 System.Drawing.Image 创建新的 System.Drawing.Graphics,后者表示,使用Graphics对象的实例调用捕捉屏幕功能,也就是所谓执行颜色数据(对应于由像素组成的矩形)从屏幕到 System.Drawing.Graphics 的绘图图面的位块传输。最后设置pictureBox1就行了。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//通过输入的数据获取需要捕捉的区域的大小和位置
int sizeWidth = Convert.ToInt32(textBoxSize.Text);
int sizeHeight = Convert.ToInt32(textBoxSize.Text);
int sourceX = Convert.ToInt32(textBoxX.Text);
int sourceY = Convert.ToInt32(textBoxY.Text);
//设置图像的大小
Bitmap _bitMap = new Bitmap(sizeWidth, sizeHeight);
Graphics g = Graphics.FromImage(_bitMap);
//从指定的区域中复制图形
g.CopyFromScreen(sourceX, sourceY, 0, 0, new Size(sizeWidth, sizeWidth));
//把图形放在PictureBox中显示
pictureBox1.Image = _bitMap;
g.Dispose();
//不能使用Dispose,不然图片就没有了,同时也会引起异常
//_bitMap.Dispose();
}
}
本站中使用屏幕捕捉功能的相关文章
.Net(C#)自定义WinForm控件之屏幕捕捉(Teboscreen)
http://www.myfirm.cn/news/DotNetUserInterface/20080220010644407.html