C#中怎么连接海康威视(云服务器、云主机、高防IP、高防服务器、香港服务器、美国服务器,开发技术)

时间:2024-05-05 12:16:31 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

C# 连接海康威视

C#中怎么连接海康威视

///<summary>///海康威视SDK///</summary>publicclassSDK_Hikvision:SDK_Camera{///<summary>///相机名称///</summary>privatestringCam_name;///<summary>///相机实例///</summary>privateMyCameram_MyCamera;///<summary>///图像回调相机名称图源///</summary>publicoverrideeventImageDelegateImage_Delegate;IntPtrpBufForSaveImage=IntPtr.Zero;//注册图像回调函数MyCamera.cbOutputExdelegateImageCallback;///<summary>///是否已连接相机///</summary>publicoverrideboolIsOpen{get{if(m_MyCamera!=null){returnm_MyCamera.MV_CC_IsDeviceConnected_NET();}returnfalse;}}///<summary>//////</summary>~SDK_Hikvision(){}///<summary>///实时采集///</summary>publicoverridevoidAcquisition(){if(m_MyCamera==null)return;if(GetTriggerMode()==TriggerMode.On){SetTriggerMode(TriggerMode.Off);}m_MyCamera.MV_CC_StartGrabbing_NET();}///<summary>///关闭采集///</summary>publicoverridevoidCloseConsecutive(){if(m_MyCamera==null)return;m_MyCamera.MV_CC_StopGrabbing_NET();}///<summary>///关闭相机///</summary>publicoverridevoidClose_Camera(){if(m_MyCamera==null)return;m_MyCamera.MV_CC_StopGrabbing_NET();if(pBufForSaveImage!=IntPtr.Zero){Marshal.Release(pBufForSaveImage);}/*m_MyCamera.MV_CC_StopGrabbing_NET();m_MyCamera.MV_CC_ClearImageBuffer_NET();m_MyCamera.MV_CC_CloseDevice_NET();//销毁设备句柄m_MyCamera.MV_CC_DestroyDevice_NET();*/m_MyCamera.MV_CC_CloseDevice_NET();m_MyCamera.MV_CC_DestroyDevice_NET();}///<summary>///获取曝光///</summary>///<returns></returns>publicoverridedoubleGetExposureTime(){if(m_MyCamera!=null){MyCamera.MVCC_FLOATVALUEstParam=newMyCamera.MVCC_FLOATVALUE();m_MyCamera.MV_CC_GetFloatValue_NET("ExposureTime",refstParam);returnstParam.fCurValue;}return0;}///<summary>///获取增益///</summary>///<returns></returns>publicoverridedoubleGetGainRaw(){if(m_MyCamera!=null){MyCamera.MVCC_FLOATVALUEstParam=newMyCamera.MVCC_FLOATVALUE();m_MyCamera.MV_CC_GetFloatValue_NET("Gain",refstParam);returnstParam.fCurValue;}return0;}///<summary>///获取触发模式///</summary>///<returns></returns>publicoverrideTriggerModeGetTriggerMode(){if(m_MyCamera!=null){MyCamera.MVCC_ENUMVALUEMVCC_SOURCE=newMyCamera.MVCC_ENUMVALUE();m_MyCamera.MV_CC_GetEnumValue_NET("TriggerMode",refMVCC_SOURCE);MyCamera.MV_CAM_TRIGGER_MODEValue=(MyCamera.MV_CAM_TRIGGER_MODE)MVCC_SOURCE.nCurValue;return(TriggerMode)MVCC_SOURCE.nCurValue;}returnTriggerMode.On;}///<summary>///获取触发源///</summary>///<returns></returns>publicoverrideTriggerSourceGetTriggerSource(){if(m_MyCamera!=null){MyCamera.MVCC_ENUMVALUEMVCC_SOURCE=newMyCamera.MVCC_ENUMVALUE();m_MyCamera.MV_CC_GetEnumValue_NET("TriggerSource",refMVCC_SOURCE);MyCamera.MV_CAM_TRIGGER_SOURCEValue=(MyCamera.MV_CAM_TRIGGER_SOURCE)MVCC_SOURCE.nCurValue;return(TriggerSource)MVCC_SOURCE.nCurValue;}returnTriggerSource.Software;}///<summary>///打开相机///</summary>///<paramname="Cam_Name">相机名称</param>///<returns></returns>publicoverrideboolOpen_Camera(stringCam_Name){System.GC.Collect();MyCamera.MV_CC_DEVICE_INFO_LISTm_stDeviceList=newMyCamera.MV_CC_DEVICE_INFO_LIST();intnRet=MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE|MyCamera.MV_USB_DEVICE,refm_stDeviceList);if(0!=nRet){returnfalse;}for(inti=0;i<m_stDeviceList.nDeviceNum;i++){MyCamera.MV_CC_DEVICE_INFOdevice=(MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(m_stDeviceList.pDeviceInfo[i],typeof(MyCamera.MV_CC_DEVICE_INFO));if(device.nTLayerType==MyCamera.MV_GIGE_DEVICE){IntPtrbuffer=Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stGigEInfo,0);//MyCamera.MV_GIGE_DEVICE_INFOgigeInfo=(MyCamera.MV_GIGE_DEVICE_INFO)MyCamera.ByteToStruct(device.SpecialInfo.stGigEInfo,typeof(MyCamera.MV_GIGE_DEVICE_INFO));MyCamera.MV_GIGE_DEVICE_INFOgigeInfo=(MyCamera.MV_GIGE_DEVICE_INFO)Marshal.PtrToStructure(buffer,typeof(MyCamera.MV_GIGE_DEVICE_INFO));this.Cam_name=gigeInfo.chUserDefinedName;}elseif(device.nTLayerType==MyCamera.MV_USB_DEVICE){IntPtrbuffer=Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stUsb3VInfo,0);MyCamera.MV_USB3_DEVICE_INFOusbInfo=(MyCamera.MV_USB3_DEVICE_INFO)Marshal.PtrToStructure(buffer,typeof(MyCamera.MV_USB3_DEVICE_INFO));//MyCamera.MV_USB3_DEVICE_INFOusbInfo=(MyCamera.MV_USB3_DEVICE_INFO)MyCamera.ByteToStruct(device.SpecialInfo.stUsb3VInfo,typeof(MyCamera.MV_USB3_DEVICE_INFO));this.Cam_name=usbInfo.chUserDefinedName;}if(Cam_Name==this.Cam_name){//打开设备if(null==m_MyCamera){m_MyCamera=newMyCamera();}//创建设备nRet=m_MyCamera.MV_CC_CreateDevice_NET(refdevice);if(MyCamera.MV_OK!=nRet){returnfalse;}//打开设备nRet=m_MyCamera.MV_CC_OpenDevice_NET();if(MyCamera.MV_OK!=nRet){//打开设备失败销毁设备句柄m_MyCamera.MV_CC_DestroyDevice_NET();returnfalse;}//探测网络最佳包大小(只对GigE相机有效)if(device.nTLayerType==MyCamera.MV_GIGE_DEVICE){intnPacketSize=m_MyCamera.MV_CC_GetOptimalPacketSize_NET();if(nPacketSize>0){m_MyCamera.MV_CC_SetIntValue_NET("GevSCPSPacketSize",(uint)nPacketSize);}}//设置相机模式//连续采集m_MyCamera.MV_CC_SetEnumValue_NET("AcquisitionMode",(uint)MyCamera.MV_CAM_ACQUISITION_MODE.MV_ACQ_MODE_CONTINUOUS);//触发模式m_MyCamera.MV_CC_SetEnumValue_NET("TriggerMode",(uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);//设置图像缓存节点个数m_MyCamera.MV_CC_SetImageNodeNum_NET(8);//注册图像回调函数ImageCallback=newMyCamera.cbOutputExdelegate(GrabImage);//来设置数据回调函数。nRet=m_MyCamera.MV_CC_RegisterImageCallBackEx_NET(ImageCallback,IntPtr.Zero);if(MyCamera.MV_OK!=nRet){returnfalse;}//开启采集m_MyCamera.MV_CC_StartGrabbing_NET();returntrue;}}returnfalse;}///<summary>///图像注册事件///</summary>///<paramname="pData"></param>///<paramname="pFrameInfo"></param>///<paramname="pUser"></param>privatevoidGrabImage(IntPtrpData,refMyCamera.MV_FRAME_OUT_INFO_EXpFrameInfo,IntPtrpUser){byte[]SrcData=newbyte[pFrameInfo.nHeight*pFrameInfo.nWidth];//图像数据//Marshal.Copy(pData,SrcData,0,(int)pFrameInfo.nFrameLen);HObjectHobj;HOperatorSet.GenEmptyObj(outHobj);byte[]imageData=IntPtr2Bytes(pData,(int)(pFrameInfo.nFrameLen));uintimageLen=pFrameInfo.nFrameLen;uintimageWidth=pFrameInfo.nWidth;uintimageHight=pFrameInfo.nHeight;if(IsMonoPixelFormat(pFrameInfo.enPixelType))//黑白{Hobj.Dispose();HOperatorSet.GenImage1(outHobj,"byte",pFrameInfo.nWidth,pFrameInfo.nHeight,pData);}else{if(pFrameInfo.enPixelType==MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed)//RGB{Hobj.Dispose();HOperatorSet.GenImageInterleaved(outHobj,pData,"rgb",(int)pFrameInfo.nWidth,(int)pFrameInfo.nHeight,0,"byte",(int)pFrameInfo.nWidth,(int)pFrameInfo.nHeight,0,0,-1,0);}else{if(pBufForSaveImage==IntPtr.Zero){pBufForSaveImage=Marshal.AllocHGlobal((int)(pFrameInfo.nWidth*pFrameInfo.nHeight*3+2048));}MyCamera.MV_PIXEL_CONVERT_PARAMstConverPixelParam=newMyCamera.MV_PIXEL_CONVERT_PARAM();stConverPixelParam.nWidth=pFrameInfo.nWidth;stConverPixelParam.nHeight=pFrameInfo.nHeight;stConverPixelParam.pSrcData=pData;stConverPixelParam.nSrcDataLen=pFrameInfo.nFrameLen;stConverPixelParam.enSrcPixelType=pFrameInfo.enPixelType;stConverPixelParam.enDstPixelType=MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed;//在此处选择需要转换的目标类型stConverPixelParam.pDstBuffer=pBufForSaveImage;stConverPixelParam.nDstBufferSize=(uint)(pFrameInfo.nWidth*pFrameInfo.nHeight*3+2048);m_MyCamera.MV_CC_ConvertPixelType_NET(refstConverPixelParam);Hobj.Dispose();HOperatorSet.GenImageInterleaved(outHobj,pBufForSaveImage,"rgb",(int)pFrameInfo.nWidth,(int)pFrameInfo.nHeight,0,"byte",(int)pFrameInfo.nWidth,(int)pFrameInfo.nHeight,0,0,-1,0);}}if(Hobj.CountObj()>0){Image_Delegate?.Invoke(Cam_name,Hobj?.Clone());}Hobj?.Dispose();System.GC.Collect();}publicstaticbyte[]IntPtr2Bytes(IntPtrptr,intsize){if(ptr==IntPtr.Zero){returnnull;}byte[]bytes=newbyte[size];Marshal.Copy(ptr,bytes,0,size);returnbytes;}///<summary>///黑白图像///</summary>///<paramname="enType"></param>///<returns></returns>privateboolIsMonoPixelFormat(MyCamera.MvGvspPixelTypeenType){switch(enType){caseMyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_Mono10:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_Mono10_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_Mono12:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_Mono12_Packed:returntrue;default:returnfalse;}}///<summary>///彩色图像///</summary>///<paramname="enType"></param>///<returns></returns>privateboolIsColorPixelFormat(MyCamera.MvGvspPixelTypeenType){switch(enType){caseMyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BGR8_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_RGBA8_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BGRA8_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_YUV422_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_YUV422_YUYV_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR8:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG8:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB8:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG8:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB10:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB10_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG10:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG10_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG10:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG10_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR10:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR10_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB12:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB12_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG12:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG12_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG12:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG12_Packed:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR12:caseMyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR12_Packed:returntrue;default:returnfalse;}}///<summary>///设置曝光///</summary>///<paramname="Value"></param>///<returns></returns>publicoverridedoubleSetExposureTime(doubleValue){m_MyCamera.MV_CC_SetEnumValue_NET("ExposureAuto",0);MyCamera.MVCC_FLOATVALUEstParam=newMyCamera.MVCC_FLOATVALUE();m_MyCamera.MV_CC_GetFloatValue_NET("ExposureTime",refstParam);if(Value<=stParam.fMax&&Value>=stParam.fMin){m_MyCamera.MV_CC_SetFloatValue_NET("ExposureTime",(float)Value);}returnstParam.fCurValue;}///<summary>///设置增益///</summary>///<paramname="Value"></param>///<returns></returns>publicoverridedoubleSetGainRaw(doubleValue){m_MyCamera.MV_CC_SetEnumValue_NET("GainAuto",0);MyCamera.MVCC_FLOATVALUEstParam=newMyCamera.MVCC_FLOATVALUE();m_MyCamera.MV_CC_GetFloatValue_NET("Gain",refstParam);if(Value<=stParam.fMax&&Value>=stParam.fMin){m_MyCamera.MV_CC_SetFloatValue_NET("Gain",(float)Value);}returnstParam.fCurValue;}///<summary>///获取触发模式///</summary>///<paramname="mode"></param>publicoverridevoidSetTriggerMode(TriggerModemode){if(mode==TriggerMode.Off){m_MyCamera.MV_CC_SetEnumValue_NET("TriggerMode",(uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_OFF);}else{m_MyCamera.MV_CC_SetEnumValue_NET("TriggerMode",(uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);}}///<summary>///设置触发源///</summary>///<paramname="source"></param>publicoverridevoidSetTriggerSource(TriggerSourcesource){m_MyCamera.MV_CC_SetEnumValue_NET("TriggerMode",(uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);switch(source){caseTriggerSource.Line1:m_MyCamera.MV_CC_SetEnumValue_NET("TriggerSource",(uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0);break;caseTriggerSource.Line2:m_MyCamera.MV_CC_SetEnumValue_NET("TriggerSource",(uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE1);break;caseTriggerSource.Software:m_MyCamera.MV_CC_SetEnumValue_NET("TriggerSource",(uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE);break;default:break;}}///<summary>///软触发一次///</summary>publicoverrideboolTriggerSoftware(){if(m_MyCamera==null)returnfalse;if(GetTriggerMode()==TriggerMode.Off){m_MyCamera.MV_CC_SetEnumValue_NET("TriggerMode",(uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);m_MyCamera.MV_CC_SetEnumValue_NET("TriggerSource",(uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE);}m_MyCamera.MV_CC_SetCommandValue_NET("TriggerSoftware");returntrue;}}

C#海康威视无法加载DLL“..\bin\HCNetSDK.dll”

项目场景

c#海康威视:System.DllNotFoundException:“无法加载 DLL“&hellip;\bin\HCNetSDK.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。”

问题描述

将海康威视的SDK直接复制到我的项目中时,使用到SDK中的方法就出现这个异常。

将demo里的dll放在bin文件夹和bin\Debug文件夹里时也会出错。

C#中怎么连接海康威视

原因分析

这个肯定是路径出错了,不然不会报这个找不到指定模块的异常。

解决方案

在代码中选中方法函数,右键转到定义:

C#中怎么连接海康威视

将\bin\HCNetSDK.dll改成\Debug\HCNetSDK,这样就不会报错了。

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:C#中怎么连接海康威视的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:C#怎么使用udp实现消息的接收和发送下一篇:

12 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18