//车牌识别结果回调 private int OnPlateResult(int handle, IntPtr pUserData, IntPtr pResult, uint uNumPlates, VzClientSDK.VZ_LPRC_RESULT_TYPE eResultType, IntPtr pImgFull, IntPtr pImgPlateClip) { if (eResultType != VzClientSDK.VZ_LPRC_RESULT_TYPE.VZ_LPRC_RESULT_REALTIME) { VzClientSDK.TH_PlateResult result = (VzClientSDK.TH_PlateResult)Marshal.PtrToStructure(pResult, typeof(VzClientSDK.TH_PlateResult)); string strLicense = new string(result.license); VzClientSDK.VZ_LPR_MSG_PLATE_INFO plateInfo = new VzClientSDK.VZ_LPR_MSG_PLATE_INFO(); plateInfo.plate = strLicense; //设置视频截图保存图片的目录及格式 DateTime nowTime = DateTime.Now; string sTime = string.Format("{0:yyyyMMddHHmmssffff}", nowTime); string strFilePath = m_sAppPath + "\\cap\\"; if (!Directory.Exists(strFilePath)) { Directory.CreateDirectory(strFilePath); } string path = strFilePath + sTime + ".jpg"; //将图像保存为JPEG到指定路径 VzClientSDK.VzLPRClient_ImageSaveToJpeg(pImgFull, path, 100); plateInfo.img_path = path; int size = Marshal.SizeOf(plateInfo); IntPtr intptr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(plateInfo, intptr, true); Win32API.PostMessage(hwndMain, MSG_PLATE_INFO, (int)intptr, handle);//将消息推送给窗体 } return(0); }
//设置组网识别结果的回调函数 private int OnPlateGroupInfo(int handle, IntPtr pUserData, int exitEntryInfo, IntPtr exitIvsInfo, IntPtr entryIvsInfo, IntPtr exitDGInfo, IntPtr entryDGInfo) { VzClientSDK.TH_PlateResult entryInfo = new VzClientSDK.TH_PlateResult(); VzClientSDK.TH_PlateResult exitInfo = new VzClientSDK.TH_PlateResult(); VzClientSDK.IVS_DG_DEVICE_INFO entryImageInfo = new VzClientSDK.IVS_DG_DEVICE_INFO(); VzClientSDK.IVS_DG_DEVICE_INFO exitImageInfo = new VzClientSDK.IVS_DG_DEVICE_INFO(); if (exitIvsInfo != null) { entryInfo = (VzClientSDK.TH_PlateResult)Marshal.PtrToStructure(entryIvsInfo, typeof(VzClientSDK.TH_PlateResult)); } if (entryIvsInfo != null) { exitInfo = (VzClientSDK.TH_PlateResult)Marshal.PtrToStructure(exitIvsInfo, typeof(VzClientSDK.TH_PlateResult)); } if (entryDGInfo != null) { entryImageInfo = (VzClientSDK.IVS_DG_DEVICE_INFO)Marshal.PtrToStructure(entryDGInfo, typeof(VzClientSDK.IVS_DG_DEVICE_INFO)); } if (exitDGInfo != null) { exitImageInfo = (VzClientSDK.IVS_DG_DEVICE_INFO)Marshal.PtrToStructure(exitDGInfo, typeof(VzClientSDK.IVS_DG_DEVICE_INFO)); } VzClientSDK.TH_GroupPlateResult groupPlateResult = new VzClientSDK.TH_GroupPlateResult(); //获取入口设备组网车牌识别结果 if (exitEntryInfo == 0) { //车牌号码 string strEntryLicense = new string(entryInfo.license); groupPlateResult.groupLicense = strEntryLicense; //入口时间 UInt64 entryTotalSeconds1 = entryInfo.tvPTS.uTVSec; string strEntryDateTime1 = date1970ConvertCurrentDate(entryTotalSeconds1); groupPlateResult.entryDateTime = strEntryDateTime1; } //获取出口设备组网车牌结果 else if (exitEntryInfo == 1) { //车牌号码 string strExitLicense2 = new string(entryInfo.license); groupPlateResult.groupLicense = strExitLicense2; //入口时间 UInt64 entryTotalSeconds2 = entryInfo.tvPTS.uTVSec; string EntryDateTime2 = date1970ConvertCurrentDate(entryTotalSeconds2); groupPlateResult.entryDateTime = EntryDateTime2; //出口时间 UInt64 exitTotalSeconds2 = exitInfo.tvPTS.uTVSec; string strExitDateTime2 = date1970ConvertCurrentDate(exitTotalSeconds2); groupPlateResult.exitDateTime = strExitDateTime2; //时间间隔 Int32 timeInterval = (Int32)(exitTotalSeconds2 - entryTotalSeconds2); string strTimeInterval = timeIntervalConvert(timeInterval); groupPlateResult.timeInterval = strTimeInterval; } //入口图片 if (entryInfo.uId > 0 && entryImageInfo.vzSN.ToString() != "") { string strEntrySN = new string(entryImageInfo.vzSN); char[] chrEntrySN = new char[17]; strEntrySN.CopyTo(0, chrEntrySN, 0, 17); string strNewEntrySN = new string(chrEntrySN); LoadGroupImg(handle, (int)entryInfo.uId, strNewEntrySN, 1); } //出口图片 if (exitInfo.uId > 0 && exitImageInfo.vzSN.ToString() != "") { string strExitSN = new string(exitImageInfo.vzSN); char[] chrExitSN = new char[17]; strExitSN.CopyTo(0, chrExitSN, 0, 17); string strNewExitSN = new string(chrExitSN); LoadGroupImg(handle, (int)exitInfo.uId, strNewExitSN, 0); } int size = Marshal.SizeOf(groupPlateResult); IntPtr intptr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(groupPlateResult, intptr, true); Win32API.PostMessage(hwndMain, MSG_GROUP_PLATE_INFO, (int)intptr, handle);//将消息推送给窗体 return(0); }
//获取组网图片线程 private void LoadGroupImgThread(int handle, int id, string sn, int isEntry) { VzClientSDK.TH_GroupPlateResult groupImageResult = new VzClientSDK.TH_GroupPlateResult(); int nSize = 1280 * 720; byte[] picdata = new byte[1280 * 720]; GCHandle hObject = GCHandle.Alloc(picdata, GCHandleType.Pinned); //为指定的对象分配指定类型的句柄,允许使用固定对象的地址 IntPtr pObject = hObject.AddrOfPinnedObject(); //检索对象的地址 int ret = VzClientSDK.VzLPRClient_LoadGroupFullImageById(handle, id, sn, pObject, ref nSize); DateTime now = DateTime.Now; string sTime = string.Format("{0:yyyyMMddHHmmssffff}", now); string szImgDir = ""; string strFilePath = m_sAppPath + "\\组网"; if (!Directory.Exists(strFilePath)) { Directory.CreateDirectory(strFilePath); } if (isEntry == 1) { szImgDir = strFilePath + "\\入口"; if (!Directory.Exists(szImgDir)) { Directory.CreateDirectory(szImgDir); } } else { szImgDir = strFilePath + "\\出口"; if (!Directory.Exists(szImgDir)) { Directory.CreateDirectory(szImgDir); } } string path = szImgDir + "\\" + sTime + ".jpg"; if (nSize > 0 && nSize < 1280 * 720) { FileStream aFile = new FileStream(path, FileMode.Create); aFile.Seek(0, SeekOrigin.Begin); aFile.Write(picdata, 0, picdata.Length); aFile.Close(); } groupImageResult.img_path = path; int size = Marshal.SizeOf(groupImageResult); IntPtr intptr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(groupImageResult, intptr, true); Win32API.PostMessage(hwndMain, MSG_GROUP_IMAGE_INFO, (int)intptr, isEntry);//将消息推送给窗体 if (hObject.IsAllocated) { hObject.Free(); } }