文章目录
安装
首先,下载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