Ejemplo n.º 1
0
        /// <summary>
        /// 实时视频回调
        /// </summary>
        /// <param name="pFirstParameter"></param>
        /// <param name="wVideoID"></param>
        /// <param name="wSize"></param>
        /// <param name="pbImage"></param>
        /// <returns></returns>
        private static unsafe long onVideoCallBack(IntPtr pFirstParameter, UInt16 wVideoID, UInt16 wSize, byte *pbImage)
        {
            HvResult hvresult = Marshal.GetObjectForIUnknown(pFirstParameter) as HvResult;

            if (null == hvresult)
            {
                return(-1);
            }

            int iSize = wSize;

            if (iSize < 1)
            {
                return(-1);
            }
            if (iSize > hvresult.VideoImage.Length)
            {
                Array.Resize <byte>(ref hvresult.VideoImage, iSize);
            }
            //分配图像字节,该句注释再测试节省内存空间
            hvresult.VideoImage = new byte[iSize];
            Marshal.Copy((IntPtr)pbImage, hvresult.VideoImage, 0, iSize);
            hvresult.VideoSize = iSize;
            hvresult.dtVideo   = DateTime.Now;
            return(0);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 大图回传
        /// </summary>
        /// <param name="pFirstParameter">第一个传递参数</param>
        /// <param name="dwCarID">车号</param>
        /// <param name="wImageWidth">图像尺寸宽度</param>
        /// <param name="wImageHigh">图像尺寸高度</param>
        /// <param name="bType">图像类别</param>
        /// <param name="wSize">数据大小</param>
        /// <param name="pbImage">图像数据的指针</param>
        /// <param name="wImageID">图像的ID号,表示得到的是哪一张图片</param>
        /// <param name="wHighImgFlag">高清图片标志</param>
        /// <param name="wPlateWidth">表示该图象中检测到的车牌矩形左上坐标</param>
        /// <param name="wPlateHigh">表示该图象中检测到的车牌矩形右下坐标</param>
        /// <param name="dwTimeMs">时间</param>
        /// <returns></returns>
        private unsafe long onBigImgCallBack(IntPtr pFirstParameter, uint dwCarID, ushort wImageWidth, ushort wImageHigh, byte bType, ushort wSize, byte *pbImage,
                                             ushort wImageID, ushort wHighImgFlag, ushort wPlateWidth, ushort wPlateHigh, ulong dwTimeMs)
        {
            HvResult hvresult = Marshal.GetObjectForIUnknown(pFirstParameter) as HvResult;

            if (null == hvresult)
            {
                return(-1);
            }

            int iSize = wSize;

            if (iSize < 1)
            {
                return(-1);
            }
            //wHighImgFlag的值跟FF00按位与操作,如果高8位是FF,&结果不为0,则应是高清图片
            ////取wHighImgFlag低8位,并左移16位
            if ((wHighImgFlag & 0xFF00) != 0)
            {
                iSize = wSize + (int)((wHighImgFlag & 0x00FF) << 16);
            }

            hvresult.CarID = dwCarID;
            //拷贝图片数据
            hvresult.BigImage = new byte[iSize];
            Marshal.Copy((IntPtr)pbImage, hvresult.BigImage, 0, iSize);
            return(0);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 小图回调
        /// </summary>
        /// <param name="pFirstParameter"></param>
        /// <param name="dwCarID"></param>
        /// <param name="wImageWidth"></param>
        /// <param name="wImageHigh"></param>
        /// <param name="bType"></param>
        /// <param name="wSize"></param>
        /// <param name="pbImage"></param>
        /// <param name="dwTimeMs"></param>
        /// <returns></returns>
        private unsafe long onSmallImgCallBack(IntPtr pFirstParameter, uint dwCarID, ushort wImageWidth, ushort wImageHigh, byte bType,
                                               ushort wSize, byte *pbImage, ulong dwTimeMs)
        {
            HvResult hvresult = Marshal.GetObjectForIUnknown(pFirstParameter) as HvResult;

            if (null == hvresult)
            {
                return(-1);
            }

            ////设置缓存长度
            int iRealLen = 0;
            int iBuffLen = (int)wImageWidth * (int)wImageHigh * 3 + 1024;

            hvresult.SmallImage = new byte[iBuffLen];
            ////m_Redult为存储结果流的类
            long state = 0;

            fixed(byte *pDest = hvresult.SmallImage)
            {
                state = HVDLLFun.Yuv2BMP(pDest, iBuffLen, ref iRealLen, pbImage, wImageWidth, wImageHigh);
                Array.Resize <byte>(ref hvresult.SmallImage, iRealLen);
            }

            return(0);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 获取视频信息
        /// </summary>
        /// <param name="iVideo">视频通道号</param>
        /// <returns></returns>
        public HvVideoInfo getVideoInfo(int iVideo)
        {
            HvVideoInfo info = new HvVideoInfo();

            if (IntPtr.Zero == this.m_Hv)
            {
                return(info);
            }
            HvResult hvresult = this.resultFirst;

            if (0 != iVideo)
            {
                hvresult = this.resultSecond;
            }
            info.DtVideo    = hvresult.dtVideo;
            info.VideoSize  = hvresult.VideoSize;
            info.VideoImage = hvresult.VideoImage;
            return(info);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 重置识别器结果信息
        /// <param name="iVideo">视频通道号</param>
        /// </summary>
        public void ResetInfo(int iVideo)
        {
            if (IntPtr.Zero == this.m_Hv)
            {
                return;
            }
            HvResult hvresult = this.resultFirst;

            if (0 != iVideo)
            {
                hvresult = this.resultSecond;
            }

            hvresult.info       = "";
            hvresult.strcolor   = "";
            hvresult.strplateno = "";
            hvresult.strTime    = "";
            hvresult.BigImage   = new byte[0];
            hvresult.SmallImage = new byte[0];
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 获取视频通道当前识别信息
        /// </summary>
        /// <param name="iVideo">视频通道号(0,1)</param>
        /// <returns></returns>
        public HvCarPlateInfo getCarPlateInfo(int iVideo)
        {
            HvCarPlateInfo info = new HvCarPlateInfo();

            if (IntPtr.Zero == this.m_Hv)
            {
                return(info);
            }
            HvResult hvresult = this.resultFirst;

            if (0 != iVideo)
            {
                hvresult = this.resultSecond;
            }

            info.CarNum     = hvresult.strplateno;
            info.BigImage   = hvresult.BigImage;
            info.SmallImage = hvresult.SmallImage;

            return(info);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 车牌号回调
        /// </summary>
        /// <param name="pFirstParameter">第一个传递参数</param>
        /// <param name="dwCarID">车号</param>
        /// <param name="pcPlateNo">车牌号</param>
        /// <param name="dwTimeMs">时间</param>
        /// <returns></returns>
        private long onPlateNoCallBack(IntPtr pFirstParameter, uint dwCarID, string pcPlateNo, ulong dwTimeMs)
        {
            HvResult hvresult = Marshal.GetObjectForIUnknown(pFirstParameter) as HvResult;

            if (null == hvresult)
            {
                return(-1);
            }

            string strplateno, strcolor;
            int    length = pcPlateNo.Length;

            strcolor   = pcPlateNo.Substring(0, 1);
            strplateno = pcPlateNo.Substring(1, length - 1);
            //时间的转化
            long     time_C_Long = (long)dwTimeMs;                    //C++长整型日期,毫秒为单位
            DateTime dt_1970     = new DateTime(1970, 1, 1, 0, 0, 0, 0);
            long     tricks_1970 = dt_1970.Ticks;                     //1970年1月1日刻度
            long     time_tricks = tricks_1970 + time_C_Long * 10000; //日志日期刻度
            DateTime dt          = new DateTime(time_tricks);         //转化为DateTime(世界时间)

            DateTime dt2 = dt.ToLocalTime();                          //将世界时间转化为当前时间(本时区的时间)

            hvresult.strTime = string.Format("{0:yyyy-MM-dd HH:mm:ss}", dt2);
            byte[] plateinfo = new byte[256];
            unsafe
            {
                byte *pszInfo = null;
                HVDLLFun.HV_GetPlateInfo(hvresult.m_Hv, &pszInfo);                                      //提取附加的信息
                Marshal.Copy((IntPtr)pszInfo, plateinfo, 0, 256);
            }
            hvresult.CarID      = dwCarID;
            hvresult.info       = Encoding.Default.GetString(plateinfo);
            hvresult.strcolor   = strcolor;
            hvresult.strplateno = strplateno;
            return(0);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 读取视频图像流
        /// </summary>
        /// <param name="iVideo">视频通道号(0,1)</param>
        /// <returns></returns>
        public MemoryStream getStreamVideo(int iVideo)
        {
            if (IntPtr.Zero == this.m_Hv)
            {
                return(null);
            }
            HvResult hvresult = this.resultFirst;

            if (0 != iVideo)
            {
                hvresult = this.resultSecond;
            }
            if (hvresult.VideoSize < 1 || hvresult.VideoImage.Length < 1)
            {
                return(null);
            }
            try
            {
                hvresult.streamVideo.SetLength(hvresult.VideoSize);
                hvresult.streamVideo.Seek(0, SeekOrigin.Begin);
                hvresult.streamVideo.Write(hvresult.VideoImage, 0, hvresult.VideoSize);
            }catch { }
            return(hvresult.streamVideo);
        }