c# 怎么获取autosize为true的控件高度_项目实战 | c#与VisionPro联合编程(二)使用相机获取图像...

【往期经典】

c#和Vpro,极简实现,5步完成一个可以运行的视觉程序

机器人无损收发小数的原理

TCP通信 | 三行代码制作自己的专属工具

vs+c#做的HMI程序模板,可以拿来直接用

源程序 | c#做的HMI程序模板

WinForm | 一种程序配置文件的读写方法

观察者模式 | .net中的事件

如何调试TCP通信

用队列消息状态机实现TCP通信

VisionPro | 使用卡尺工具测量宽度

今天要说的内容是:1)c#下使用VisionPro的工具驱动相机获取图像;2)制作显示界面,显示相机获取的图像;3)相机响应用户指令。

用到的工具:1)gige相机;2)VisionPro9.0;3)VisualStudio2019 。


1 一个难懂的地方

在VisionPro的帮助文档中有个词“帧获取器”,大家默默的把它翻译成相机就行了。使用GigE相机的时候就是指相机,其他的也许有不同,不知道。

VisionPro中,相机的初始化设置界面包含了相机的所有属性。这些在c#环境中都可以通过编码的方式实现。

37c3152041052dac570f85d46a54d6e9.png

2 取像工具和取像队列

上图对应的工具是CogAcqFifoTool,这个类包含上图中的所有内容。只有一个相机的时候,可以直接使用完成与相机的连接。

CogAcqFifoTool acqTool = new CogAcqFifoTool();

拍照获取图像使用的是取像工具的属性Operator,它是ICogAcqFifo类型。

ICogAcqFifo AcqFifo = AcqTool.Operator;

使用取像队列的Acquire方法即可获得一张图像,取像队列还提供了异步方法,通常的应用中这个同步方法就足够了。

ICogImage image= AcqFifo.Acquire(out numAcqs);

3 构建项目

工具都准备好了,但是代码不能慌着写。使用相机获取一张图像这个任务可以分成两个子任务:1)获取图像;2)展示图像。

81f067c61277250c2202ebcab6cd16b1.png

展示图像使用CogRecordDispaly控件,找个喜欢的位置放好就可以了。

获取图像怎么做?可以暂停,思考一下。

VisionPro提供了获取图像的例子,可以用来学习(2 取像工具和取像队列)中工具的使用技巧。在项目中不可以完全使用。

从“单一职责”的角度考虑,界面类中不应该存在连接相机内容。界面的职责是显示,所需要的只是一张图像。就像讨厌的老板:“我只要结果,过程我不管”。

利用面向对象分析这个项目,相机是一个独立存在的个体,有自己的名字,划分为一个单独的类,很正常。这个类就命名为 Camra

硬件设备的使用过程通常分三步:连接→使用功能→断开。所以,Camra类的方法按照这三部分添加:GetImageClose。连接放在构造方法中。

43bf0d2b2f968c108fb972b3db7126b4.png

设计好类才,编码工作才可以开始。

    public class Camra    {        private CogAcqFifoTool acqTool = null;         private int numAcqs = 0;        public ICogAcqFifo AcqFifo { get; set; } = null;        public Camra()        {            acqTool = new CogAcqFifoTool();            AcqFifo = acqTool.Operator;            if (AcqFifo is null)            {                throw new Exception("No camra found.");            }        }        public ICogImage GetImage()        {            ICogImage image= AcqFifo.Acquire(out int triggerNumber);            numAcqs++;            if (numAcqs > 4)            {                numAcqs = 0;                GC.Collect();            }            return image;        }        public void Close()        {            CogFrameGrabbers frameGrabbers = new CogFrameGrabbers();            foreach (ICogFrameGrabber fg in frameGrabbers)            {                fg.Disconnect(false);            }        }    }
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值