海康SDK—测温热像仪
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using PreviewDemo;
using System.Runtime.InteropServices;
using System.Threading;
using UnityEngine.UI;public class HK_Camera_Tool : MonoSingleton<HK_Camera_Tool>
{ private uint iLastErr = 0;public int m_lUserID = -1; private CHCNetSDK.NET_DVR_USER_LOGIN_INFO struLogInfo;private CHCNetSDK.NET_DVR_DEVICEINFO_V40 DeviceInfo;CHCNetSDK.LOGINRESULTCALLBACK LoginCallBack = null;private int ret; public static string fMaxTemperature;#region 海康SDK方法 public void _Init(){bool m_bInitSDK = CHCNetSDK.NET_DVR_Init();if (m_bInitSDK == false){Debug.Log("初始化失败!");return;}else{Debug.Log("初始化成功!");CHCNetSDK.NET_DVR_SetLogToFile(1, "C:\\SdkLogUnity\\", true);}}public void _Login(string iP, string port, string userName, string password){struLogInfo = new CHCNetSDK.NET_DVR_USER_LOGIN_INFO();if (m_lUserID < 0){byte[] byIP = System.Text.Encoding.Default.GetBytes(iP); struLogInfo.sDeviceAddress = new byte[129];byIP.CopyTo(struLogInfo.sDeviceAddress, 0);byte[] byUserName = System.Text.Encoding.Default.GetBytes(userName); struLogInfo.sUserName = new byte[64];byUserName.CopyTo(struLogInfo.sUserName, 0);byte[] byPassword = System.Text.Encoding.Default.GetBytes(password); struLogInfo.sPassword = new byte[64];byPassword.CopyTo(struLogInfo.sPassword, 0);struLogInfo.wPort = ushort.Parse(port);struLogInfo.bUseAsynLogin = true; DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V40();m_lUserID = CHCNetSDK.NET_DVR_Login_V40(ref struLogInfo, ref DeviceInfo);if (m_lUserID < 0){iLastErr = CHCNetSDK.NET_DVR_GetLastError();Debug.Log("登陆失败_NET_DVR_Login_V40 failed, error code= " + iLastErr);return;}else{Debug.Log("登陆成功!" + "返回iD:" + m_lUserID);}}else{if (!CHCNetSDK.NET_DVR_Logout(m_lUserID)){iLastErr = CHCNetSDK.NET_DVR_GetLastError();Debug.LogWarning("注销登录:" + iLastErr);return;}m_lUserID = -1;}}public IEnumerator ThermometrySetting(){ Debug.Log("进入协程");yield return new WaitForSeconds(1f);Debug.Log("已延迟1s");var size = Marshal.SizeOf(typeof(CHCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND));CHCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND struThermCond = new CHCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND();struThermCond.dwSize = (uint)size;struThermCond.byRuleID = 0; struThermCond.dwChan = 2;IntPtr pCond = Marshal.AllocCoTaskMem(size);Marshal.StructureToPtr(struThermCond, pCond, false);ret = CHCNetSDK.NET_DVR_StartRemoteConfig(m_lUserID, 3629, pCond, size, Callback, IntPtr.Zero);if (ret < 0){Debug.Log("配置测温失败, 错误代码:" + CHCNetSDK.NET_DVR_GetLastError()); }yield return new WaitForSeconds(1f);if (CHCNetSDK.NET_DVR_StopRemoteConfig(ret)){StopCoroutine(ThermometrySetting());Debug.Log("已停止测温数据");}else{Debug.Log("停止测温数据出错:" + CHCNetSDK.NET_DVR_GetLastError());}} public void Start_ThermometrySetting(){var size = Marshal.SizeOf(typeof(CHCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND));CHCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND struThermCond = new CHCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND();struThermCond.dwSize = (uint)size;struThermCond.byRuleID = 0; struThermCond.dwChan = 2;IntPtr pCond = Marshal.AllocCoTaskMem(size);Marshal.StructureToPtr(struThermCond, pCond, false);ret = CHCNetSDK.NET_DVR_StartRemoteConfig(m_lUserID, 3629, pCond, size, Callback, IntPtr.Zero);if (ret < 0){Debug.Log("配置测温失败, 错误代码:" + CHCNetSDK.NET_DVR_GetLastError()); }}public void Stop_ThermometrySetting(){if (CHCNetSDK.NET_DVR_StopRemoteConfig(ret)){StopCoroutine(ThermometrySetting());Debug.Log("已停止测温数据");}else{Debug.Log("停止测温数据出错:" + CHCNetSDK.NET_DVR_GetLastError());}}private void Callback(uint dwType, IntPtr lpBuffer, uint dwBufLen, IntPtr pUserData){Debug.Log("开始测温...");var retMes = Marshal.PtrToStructure<CHCNetSDK.NET_DVR_THERMOMETRY_UPLOAD>(lpBuffer);fMaxTemperature = retMes.struLinePolygonThermCfg.fMaxTemperature.ToString("F1");Debug.Log("停止测温数据中...");}public void JPEGEvent(int lUserID, int lChannel, string pathAndName){CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();lpJpegPara.wPicQuality = 0; lpJpegPara.wPicSize = 0xff; if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture(lUserID, lChannel, ref lpJpegPara, pathAndName)){iLastErr = CHCNetSDK.NET_DVR_GetLastError();Debug.Log("抓图报错:" + iLastErr);return;}else{Debug.Log("截图已保存:" + pathAndName);}return;}public void _Disable(){ Debug.Log("用户注销...");CHCNetSDK.NET_DVR_Logout(m_lUserID);m_lUserID = -1; CHCNetSDK.NET_DVR_Cleanup();Debug.Log("SDK资源卸载...");}#endregion}