首先,MvApi.CameraGrabber_Create这是一个委托方法的对象,定义如下:
- public static pfnCameraGrabber_Create CameraGrabber_Create;
复制代码
原型类型pfnCameraGrabber_Create定义如下,就是带一个采集指针和设备信息
- /******************************************************/
- // 函数名 : CameraGrabber_Create
- // 功能描述 : 从设备描述信息创建Grabber
- // 参数 : Grabber 如果函数执行成功返回函数创建的Grabber对象
- // pDevInfo 该相机的设备描述信息,由CameraEnumerateDevice函数获得。
- // 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0);
- // 否则返回非0值的错误码,请参考CameraStatus.h
- // 中错误码的定义。
- /******************************************************/
- public delegate CameraSdkStatus pfnCameraGrabber_Create(
- out IntPtr Grabber,
- ref tSdkCameraDevInfo pDevInfo
- );
复制代码
相机设备信息类型定义如下:
- public struct tSdkCameraDevInfo
- {
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
- public byte[] acProductSeries; // 产品系列
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
- public byte[] acProductName; // 产品名称
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
- public byte[] acFriendlyName; // 昵称,后加#和索引号来区分
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
- public byte[] acLinkName; // 设备符号连接名,内部使用
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
- public byte[] acDriverVersion; // 驱动版本
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
- public byte[] acSensorType; // sensor类型
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
- public byte[] acPortType; // 接口类型
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
- public byte[] acSn; // 产品唯一序列号
- public uint uInstance; // 该型号相机在该电脑上的实例索引号,用于区分同型号多相机
- }
复制代码
那么m_Grabber 是什么呢?
- protected IntPtr m_Grabber = IntPtr.Zero;
复制代码
上面的函数注释里面有这句话解释:
从代码中出现的定义可以看到,代表的就是相机采集对象(指针对象),通过它就可以设置和操控相机!
那m_hCamera是什么?这个代表相机的句柄,代表的是相机的资源,和采集对象不一样的!
但是我们可以通过采集对象获取相机的句柄来进行操作(部分函数需要这个句柄而不是采集对象),也可以通采集对象获取设备信息!
- MvApi.CameraGrabber_GetCameraDevInfo(m_Grabber, out m_DevInfo);
- MvApi.CameraGrabber_GetCameraHandle(m_Grabber, out m_hCamera);
复制代码
|