自定义截图类(C#)

3/13:

start()是个败笔,有需要用的同学请自行处理什么地方该start(源码或调用),有时间的话我再理顺一下它最佳的出现位置

2/27更新:

Start方法中增加重置图片到原始大小的功能,解决每次初始化均以当前图片大小为100%计算缩放比率的bug

目前实现如下功能:
1,随鼠标在图片上的移动会出现一个半透明的框,框内的部分即为截取的部分,双击即可获得截取部分
2,支持自定义选择框的大小(设置size属性)
3,支持自定义选择框的颜色(设置画刷brush属性)
4,支持鼠标滚轮缩放图片
5,支持设置缩放步进幅度(step属性)
6,支持设置缩放范围(scale属性)【注:此百分比以开始截图时(start方法)图片控件内图片的大小为基准】
7,支持截图后执行自定义的方法(注册Capture事件)
8,事件参数包含了截图完成后的图片对象和错误错误描述

基本使用
1,把ImageCapture对象设置为窗体级别变量,以便重复调用
2,窗体加载即实例化ImageCapture对象
3,注册截图完成事件(Capture)
4,自定义属性(可选)
5,执行Start方法,初始化截图器
6,双击截图,自动执行注册给Capture事件的方法
7,如果重新截图,需要再次执行Start方法

为什么不可以连续截图?
Start方法是为了重置截图前部分属性,以后有好的方案可能会优化这个不足之处
同样,因为Start方法的使用和本算法的小问题,在把picturebox里面的图片缩小后如果再调用一次Start方法,则会把当前图片大小当成100%大小作为基数来进行缩放,这也是小bug一枚。

另。关于缩放的算法借用了网上的成熟算法,没有深入研究和优化,拿来主义,同时年代久远也已经不知道作者了。

做了个测试程序一枚,文后示例代码(窗体文件三个,截图类文件一个)

image

下载地址:https://files.cnblogs.com/walkerwang/capture.rar

第一次修改(不带示例程序 )https://files.cnblogs.com/walkerwang/ImageProcess.rar

简单示例:

void onload()
{
	//实例化变量
	ImageCapture img = new ImageCapture(pictureBox1);
	//注册事件
	img.Capture += new ImageCapture.CaptureEventHandler(img_Capture);
	//启动截图器
	img.Start();
}
void img_Capture(object sender, ImageCapture.CaptureEventArgs e)
{
	if (null != e.Value)
	{
		//得到截图后自行处理
		pictureBox2.Image = e.Value;
	}
	else
	{
		MessageBox.Show(e.Message);
	}
}
posted @ 2012-02-25 23:14  $walker  阅读(1630)  评论(0编辑  收藏  举报