自定义截图类(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一枚。
另。关于缩放的算法借用了网上的成熟算法,没有深入研究和优化,拿来主义,同时年代久远也已经不知道作者了。
做了个测试程序一枚,文后示例代码(窗体文件三个,截图类文件一个)
下载地址: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); } }