Baumer工业相机堡盟工业相机如何在C#平台使用BGAPI SDK实现相机资源的正确释放(C#)

简介: Baumer工业相机堡盟工业相机如何在C#平台使用BGAPI SDK实现相机资源的正确释放(C#)

Baumer工业相机

Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。


Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。

Baumer工业相机的BGAPI SDK一般在使用相机后在最好需要将相机资源释放,释放的步骤比较重要,本文介绍如何在C#平台下正确地使用BGAPI SDK释放相机资源。


Baumer工业相机SDK技术背景

Baumer工业相机的BGAPI SDK可以提供相机的图像原始数据,在集成相机和视觉软件使用后,关闭视觉软件时需要同时使用SDK去释放SDK占用的相机资源。


工业相机的SDK(Software Development Kit)是为了方便开发人员对工业相机进行控制和图像采集而提供的一套软件工具。而Halcon是一款强大的机器视觉软件,能够进行图像处理、分析、识别等多种任务。


这里主要描述如何在C#的平台下实现对应的资源释放功能的核心代码


代码分析

本文介绍使用BGAPI SDK对Baumer工业相机进行开发时,使用SDK进行相机资源释放的功能。


释放所有相机资源

相机资源释放,在软件关闭,程序退出的时候,需要将创建的资源逐一关闭并释放,资源关闭

释放的顺序跟创建的顺序正好相反;


C#环境下释放所有相机资源代码如下所示:

private void buttonExit_Click(object sender, EventArgs e)
{
    if (pDevice != null)
    {
        try
        {
          //执行相机关闭指令
            if (pDevice.RemoteNodeList.GetNodePresent("AcquisitionAbort"))
                pDevice.RemoteNodeList["AcquisitionAbort"].Execute();
            pDevice.RemoteNodeList["AcquisitionStop"].Execute();
        }
        catch (BGAPI2.Exceptions.IException ex)
        {
            string str19;
            str19 = string.Format("ExceptionType:{0}! ErrorDescription:{1} in function:{2}", ex.GetType(), ex.GetErrorDescription(), ex.GetFunctionName());
            MessageBox.Show(str19);
        }
    }
    if (pDataStream != null & pBufferList != null)
    {
        try
        {
            pDataStream.StopAcquisition();
            pBufferList.DiscardAllBuffers();
        }
        catch (BGAPI2.Exceptions.IException ex)
        {
            string str20;
            str20 = string.Format("ExceptionType:{0}! ErrorDescription:{1} in function:{2}", ex.GetType(), ex.GetErrorDescription(), ex.GetFunctionName());
            MessageBox.Show(str20);
        }
    }
    if (pDataStream != null)
    {
        try
        {
          //取消注册事件
            pDataStream.UnregisterNewBufferEvent();
            pDataStream.RegisterNewBufferEvent(BGAPI2.Events.EventMode.UNREGISTERED);
            BGAPI2.Events.EventMode currentEventMode = pDataStream.EventMode;
        }
        catch (BGAPI2.Exceptions.IException ex)
        {
            string str21;
            str21 = string.Format("ExceptionType:{0}! ErrorDescription:{1} in function:{2}", ex.GetType(), ex.GetErrorDescription(), ex.GetFunctionName());
            MessageBox.Show(str21);
        }
    }
    if (pBufferList != null)
    {
        try
        {
            while (pBufferList.Count > 0)
            {
                pBuffer = pBufferList.Values.First();
                pBufferList.RevokeBuffer(pBuffer);
            }
            //关闭相机的数据流
            pDataStream.Close();
            //关闭相机的设备
            pDevice.Close();
            //关闭相机连接的网口
            pInterface.Close();
            //关闭相机连接的实例类
            pSystem.Close();
            //释放相机连接类的资源
            this.Close();
        }
        catch (BGAPI2.Exceptions.IException ex)
        {
            string str22;
            str22 = string.Format("ExceptionType:{0}! ErrorDescription:{1} in function:{2}", ex.GetType(), ex.GetErrorDescription(), ex.GetFunctionName());
            MessageBox.Show(str22);
        }
    }
}

释放相机资源注意点

C#环境下释放相机资源代码需要特别注意相机数据流的停止指令,这块尤其重要;

有时停止指令发送后,未停止相机数据流,后面直接执行相机的类释放会导致报错发生。

if (pDataStream != null & pBufferList != null)
    {
        try
        {
            pDataStream.StopAcquisition();
            pBufferList.DiscardAllBuffers();
        }
        catch (BGAPI2.Exceptions.IException ex)
        {
            string str20;
            str20 = string.Format("ExceptionType:{0}! ErrorDescription:{1} in function:{2}", ex.GetType(), ex.GetErrorDescription(), ex.GetFunctionName());
            MessageBox.Show(str20);
        }
    }

工业相机SDK来释放工业相机的资源的优点

增加灵活性: 通过使用SDK,开发人员可以定制和调整相机功能,以更好地适应他们的具体应用要求。


改进集成: 该SDK允许多个相机和相机组件与其他硬件和软件系统无缝集成。


更大程度的控制: 使用工业相机SDK可以更深入、更直接地访问相机的功能和数据,从而更好地控制捕获的图像和视频。


增强性能: 使用SDK可以提高相机性能,加快数据处理速度,从而获得更高质量的图像和视频。


降低成本: SDK允许在选择和定制相机系统时有更大的灵活性,从长远来看有可能导致成本的节约。


工业相机SDK来释放工业相机的资源的重要性

在软件中正确释放工业相机资源非常重要,因为它可以确保相机及其相关硬件不会处于不一致或不稳定的状态,这可能导致内存泄漏、性能下降和系统崩溃等问题。


遵循SDK(软件开发工具包)中的步骤,可以确保摄像机使用的所有组件被正确关闭,任何内存或其他系统资源被正确释放。


这可以帮助确保摄像机及其相关组件正常工作,并确保软件应用程序长期稳定和可靠。

目录
相关文章
|
6月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
90 0
|
6月前
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Force IP强制修改网口IP功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Force IP强制修改网口IP功能(C++)
59 0
|
3月前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
198 1
|
6月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
73 0
|
6月前
|
存储 传感器 监控
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
227 0
|
3月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
83 0
|
15天前
|
Java Linux API
Android SDK
【10月更文挑战第21天】
47 1
|
25天前
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
44 7
|
3月前
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
166 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
|
3月前
|
Dart 开发工具 Android开发
Android Studio导入Flutter项目提示Dart SDK is not configured
Android Studio导入Flutter项目提示Dart SDK is not configured
307 4

热门文章

最新文章