• 自定义截图类(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);
    	}
    }
  • 相关阅读:
    javahtml标签介绍
    腾讯课堂下载视频
    数据库
    eclipse将web项目部署到tomcat下
    c++ 枚举目录
    2022年,鉴历史,谋发展
    数字治理(软件信息化)与人性。 附:《全球数字治理白皮书》下载。
    iNeuOS工业互联网操作系统,顺利从NetCore3.1升级到Net6的过程汇报
    iNeuOS工业互联网操作系统下发命令给iNeuLink硬件网关,进一步修改设备参数和控制设备
    [免费下载应用]iNeuKernel.Ocr 图像数据识别与采集的产品化应用
  • 原文地址:https://www.cnblogs.com/walkerwang/p/2368227.html
Copyright © 2020-2023  润新知