海康威视相机C#二次开发环境配置

文章目录

安装

首先,下载MVS,安装完成之后,其【Development】文件夹即用于二次开发,该路径下【Documentations】提供了多种语言的二次开发教程,其中C#教程是chm格式,其版本号为文档版本号,查阅最新版即可;【Samples】则提供了各种编程语言的示例,其中,C#的示例程序包含两组,旧版基于.Net Framework 3.5 开发,V2版本基于.NET5,官方推荐使用V2版本。

【Development/Donet】下即为C#开发所需的SDK,本文采用【AnyCpu/netstandard2.0】,进行开发。.NetStandard其实是一个挺古老的概念了,当年.net生态比较混乱,既有Core,又有Framework。.Net Standard最后一个版本的版本号是2.1,在.NET Core3.0中被引入,但并不支持.NET Framework4.8,从而2.0成了Framework和Core最后的桥梁。

后来.NET的数字版本一统天下,Core和Framework都很少见了,Standard就更没什么人提了,但.Net Standard2.0可以兼容.NET5以上版本。官方V2版本的示例程序,就是基于.NET5开发的。

新建项目和相机初始化

下面用VS新建一个WPF项目,框架使用.NET 10.0,在右侧【解决方案资源管理器】选项卡中,右键【依赖项】,选择【添加项目引用】,找到安装路径中的【...\Development\DotNet\AnyCpu\netstandard2.0】,添加【MvCameraControl.Net.dll】。

添加完成后,在【依赖项/程序集】下面,可以找到【MvCameraControl.Net】,选中后,更改下方属性,将复制本地改为是。然后就可以在C#代码中引用其命名空间了

cs 复制代码
using MvCameraControl;

为了使用海康威视的SDK,需要对其进行初始化,以便于提前申请和分配所必须的系统资源,在WPF项目中,可以放在窗口组件初始化之后

cs 复制代码
public MainWindow()
{
    InitializeComponent();
    SDKSystem.Initialize();
}

在退出程序时,可对其反初始化,释放海康SDK占用的资源。在xaml设计窗口,在中添加

xml 复制代码
<Window 
    Closed="Window_Closed">

对应C#代码为

cs 复制代码
private void Window_Closed(object sender, EventArgs e)
{
    SDKSystem.Finalize();
}

扫描相机

下面实现扫描相机的功能,示例如下

在xaml中创建一组ComboBox和Button,内容如下

xml 复制代码
<StackPanel Orientation="Horizontal">
    <ComboBox x:Name="cbList" Width="150" Margin="5"/>
    <Button Content="扫描设备" Margin="5" Click="btnGetDeviceName_Click"/>
</StackPanel>

其扫描按钮的点击操作为

csharp 复制代码
private void btnGetDeviceName_Click(object sender, RoutedEventArgs e)
{
    List<IDeviceInfo> devInfoList = null;
    int ret = DeviceEnumerator.EnumDevices(DeviceTLayerType.MvGigEDevice, out devInfoList);
    if (ret == MvError.MV_OK)
    {
        cbList.Items.Clear();
        cbList.ItemsSource = devInfoList;
    }
}

【DeviceEnumerator.EnumDevices】就是海康威视提供的设备枚举函数,其输入参数分别是设备类别和输出的设备信息列表。

设备类别可选项如下,可用或运算符叠加。

cs 复制代码
DeviceTLayerType.MvGigEDevice
DeviceTLayerType.MvUsbDevice
DeviceTLayerType.MvGenTLCXPDevice
DeviceTLayerType.MvGenTLXoFDevice
相关推荐
zhanghaha131410 小时前
C# 系列教程_7 判断语句(分支)保姆级精讲
开发语言·c#
zhanghaha131411 小时前
C# 系列教程_8 循环语句 保姆级精讲(面向新手)
开发语言·c#
rockey62720 小时前
AScript之LINQ扩展
c#·.net·script·动态脚本
大熊背1 天前
LV值计算的注意事项
数码相机·apex·自动曝光·lv
1-1=01 天前
C# 委托与事件
开发语言·c#
敢敢のwings1 天前
SimpleMemVLA 深度解读:把原生视频上下文变成机器人的记忆
数码相机·机器人·音视频
学以智用1 天前
runtimeconfig.json + appsettings 完整详解(.NET Core/.NET5+,对比 machine.config)
.net
qq_410194291 天前
.NET 性能优化:先找瓶颈,再谈技巧
性能优化·.net
玩泥巴的1 天前
把AI编码从自由生成到受约束声明:微信生态 .NET SDK 中用源生成器压制 AI 编码幻觉的工程实践
微信·.net·aot·roslyn