需求
在上位机开发中,海康照相机的使用应该是很常见的,主要是网口通讯的相机用的多,有时也会用一些USB接口相机。以前项目都在赶时间做。没有时间去好好设计和封装。时间长了发现重复代码就很多,还有没有设计和封装的代码,代码份数和相机个数对等,说白了就是一个相机写一个相机类,基本都长一样,可能是就IP或相机名称不一样。最近有点空就来优化一下代码。这次优化完后可以直接用在以后的项目中。成熟代码没有BUG,减少重复开发,提高工作效率。
设计思想
用面像对像思想,将相机的常用属性和行为提取。在使用时只要New 一个相机对象就可以,有几个相机New几个就可以,让调用最简单化。
引用
MvCameraControl.Net
sdk 下载:https://download.csdn.net/download/cjh16606260986/88786823
代码调用
Global.CamStandardization = new HKCam(CommonConstant.CamNameStandardization, true);
Global.CamWeldHead = new HKCam(CommonConstant.CamNameWeldHead, false, 2000);
封装代码
分成三个类:
相机类 HKCam,相机公共方法类 HKCamComm,相机基本信息类 CameraModel
相机基本信息类 CameraModel
主要是相机的基本属性,如索引,名称,描述,相机类型
///
/// 相机实体
///
public class CameraModel
{
///
/// 索引
///
public int Index { get; set; }
///
/// 相机名称
///
public string Name { get; set; }
///
/// 描述
///
public string Description { get; set; }
///
/// 相机类型 MyCamera.MV_GIGE_DEVICE,MyCamera.MV_USB_DEVICE
///
public uint nTLayerType { get; set; }
}
相机公共方法类 HKCamComm
主要是一些公共方法。加载所有相机,相机列表,相机初始化,关闭相机
///
/// 照相机(海康) 公共方法
///
public class HKCamComm
{
///
/// 相机 列表
///
public static MyCamera.MV_CC_DEVICE_INFO_LIST CameraList = new MyCamera.MV_CC_DEVICE_INFO_LIST();
///
/// 相机 列表 (相机名称,CameraList的索引)
///
private static Dictionary CameraNameAndIndexDic = new Dictionary();
///
/// 加载相机
///
public static string LoadCameraDic()
{
int nRet = MyCamera.MV_OK;
if (CameraNameAndIndexDic.Count == 0)
{
CameraList.nDeviceNum = 0;
nRet = MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref CameraList);
if (MyCamera.MV_OK != nRet)
return "没有找到设备!";
if (0 ==服务器托管网 HKCamComm.CameraList.nDeviceNum)
return "设备的个数为0!";
服务器托管网var count = CameraList.nDeviceNum;
if (CameraNameAndIndexDic.Count != count)
{
for (int i = 0; i
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 我的2023–即将30岁的程序员,不得不说的那些怨念
作为一个即将年满30岁的程序员,如果用一句话总结我自己的2023年,这句话应该是什么?这个问题还真把我难住了。这一年是百感交集啊。纠结良久,我打算这样来总结我的2023:平凡而满意的生活,累而不得的工作,再次起航的写作生涯,当然还有焦虑而迷茫的未来。篇中更多是…