/// <summary> /// 设置参数 /// </summary> /// <param name="distance">距离</param> /// <param name="emissivity">发射率</param> /// <param name="reflectedTemperature">反射温度</param> /// <returns></returns> private Boolean Config(Single distance, Single emissivity, Single reflectedTemperature) { Int32 channelId = 1; IntPtr lpOutputXml = Marshal.AllocHGlobal(1024 * 1024); CHCNetSDK.NET_DVR_STD_ABILITY struSTDAbility = new CHCNetSDK.NET_DVR_STD_ABILITY(); struSTDAbility.lpCondBuffer = new IntPtr(channelId); struSTDAbility.dwCondSize = sizeof(Int32); struSTDAbility.lpOutBuffer = lpOutputXml; struSTDAbility.dwOutSize = 1024 * 1024; struSTDAbility.lpStatusBuffer = lpOutputXml; struSTDAbility.dwStatusSize = 1024 * 1024; if (!CHCNetSDK.NET_DVR_GetSTDAbility(mUserId, CHCNetSDK.NET_DVR_GET_THERMAL_CAPABILITIES, ref struSTDAbility)) { Marshal.FreeHGlobal(lpOutputXml); lpOutputXml = IntPtr.Zero; return(false); } CHCNetSDK.NET_DVR_XML_CONFIG_INPUT struInput = new CHCNetSDK.NET_DVR_XML_CONFIG_INPUT(); CHCNetSDK.NET_DVR_XML_CONFIG_OUTPUT struOuput = new CHCNetSDK.NET_DVR_XML_CONFIG_OUTPUT(); struInput.dwSize = (uint)Marshal.SizeOf(struInput); struOuput.dwSize = (uint)Marshal.SizeOf(struOuput); struOuput.lpOutBuffer = lpOutputXml; struOuput.dwOutBufferSize = 1024 * 1024; string szUrl = "GET /ISAPI/Thermal/channels/1/streamParam/capabilities"; struInput.lpRequestUrl = szUrl; struInput.dwRequestUrlLen = (uint)szUrl.Length; struInput.lpInBuffer = null; struInput.dwInBufferSize = 0; if (!CHCNetSDK.NET_DVR_STDXMLConfig(mUserId, ref struInput, ref struOuput)) { Marshal.FreeHGlobal(lpOutputXml); lpOutputXml = IntPtr.Zero; return(false); } szUrl = "GET /ISAPI/Thermal/channels/1/streamParam"; struInput.lpRequestUrl = szUrl; struInput.dwRequestUrlLen = (uint)szUrl.Length; struInput.lpInBuffer = null; struInput.dwInBufferSize = 0; if (!CHCNetSDK.NET_DVR_STDXMLConfig(mUserId, ref struInput, ref struOuput)) { Marshal.FreeHGlobal(lpOutputXml); lpOutputXml = IntPtr.Zero; return(false); } szUrl = "PUT /ISAPI/Thermal/channels/1/streamParam"; struInput.lpRequestUrl = szUrl; struInput.dwRequestUrlLen = (uint)szUrl.Length; string szThermalStreamParam = "<ThermalStreamParam version=\"2.0\" xmlns=\"http://www.isapi.org/ver20/XMLSchema\"><videoCodingType>pixel-to-pixel_thermometry_data</videoCodingType></ThermalStreamParam>"; struInput.lpInBuffer = szThermalStreamParam; struInput.dwInBufferSize = (uint)szThermalStreamParam.Length; if (!CHCNetSDK.NET_DVR_STDXMLConfig(mUserId, ref struInput, ref struOuput)) { Marshal.FreeHGlobal(lpOutputXml); lpOutputXml = IntPtr.Zero; return(false); } szUrl = "GET /ISAPI/Thermal/channels/1/thermometry/pixelToPixelParam/capabilities"; struInput.lpRequestUrl = szUrl; struInput.dwRequestUrlLen = (uint)szUrl.Length; struInput.lpInBuffer = null; struInput.dwInBufferSize = 0; if (!CHCNetSDK.NET_DVR_STDXMLConfig(mUserId, ref struInput, ref struOuput)) { Marshal.FreeHGlobal(lpOutputXml); lpOutputXml = IntPtr.Zero; return(false); } szUrl = "GET /ISAPI/Thermal/channels/1/thermometry/pixelToPixelParam"; struInput.lpRequestUrl = szUrl; struInput.dwRequestUrlLen = (uint)szUrl.Length; struInput.lpInBuffer = null; struInput.dwInBufferSize = 0; if (!CHCNetSDK.NET_DVR_STDXMLConfig(mUserId, ref struInput, ref struOuput)) { Marshal.FreeHGlobal(lpOutputXml); lpOutputXml = IntPtr.Zero; return(false); } szUrl = "GET /ISAPI/Thermal/channels/1/thermometry/pixelToPixelParam"; struInput.lpRequestUrl = szUrl; struInput.dwRequestUrlLen = (uint)szUrl.Length; string szPixelToPixelParamFormat = "<?xml version=\"1.0\" encoding=\"UTF - 8\"?>" + "<PixelToPixelParam version = \"2.0\" xmlns = \"http://www.hikvision.com/ver20/XMLSchema\">" + "<id>1</id>" + "<maxFrameRate>0</maxFrameRate>" + "<reflectiveEnable>false</reflectiveEnable>" + "<reflectiveTemperature>{0:F2}</reflectiveTemperature>" + "<emissivity>{1:F2}</emissivity>" + "<distance>{2:D}</distance>" + "<refreshInterval>0</refreshInterval>" + "</PixelToPixelParam>"; string szPixelToPixelParam = string.Format(szPixelToPixelParamFormat, reflectedTemperature, emissivity, (Int32)distance); struInput.lpInBuffer = szPixelToPixelParam; struInput.dwInBufferSize = (uint)szPixelToPixelParam.Length; if (!CHCNetSDK.NET_DVR_STDXMLConfig(mUserId, ref struInput, ref struOuput)) { Marshal.FreeHGlobal(lpOutputXml); lpOutputXml = IntPtr.Zero; return(false); } Marshal.FreeHGlobal(lpOutputXml); lpOutputXml = IntPtr.Zero; CHCNetSDK.NET_DVR_FOCUSMODE_CFG cfg = new CHCNetSDK.NET_DVR_FOCUSMODE_CFG(); uint returnBytes = 0; int outSize = Marshal.SizeOf(cfg); IntPtr outBuffer = Marshal.AllocHGlobal(outSize); Marshal.StructureToPtr(cfg, outBuffer, false); if (!CHCNetSDK.NET_DVR_GetDVRConfig(mUserId, CHCNetSDK.NET_DVR_GET_FOCUSMODECFG, 1, outBuffer, (uint)outSize, ref returnBytes)) { Marshal.FreeHGlobal(outBuffer); outBuffer = IntPtr.Zero; return(false); } cfg.byFocusMode = 2; bool ret = CHCNetSDK.NET_DVR_SetDVRConfig(mUserId, CHCNetSDK.NET_DVR_SET_FOCUSMODECFG, 1, outBuffer, (uint)outSize); Marshal.FreeHGlobal(outBuffer); outBuffer = IntPtr.Zero; return(ret); }