private void capture_frontPictureToRam(ref object fileName)
        {
            if (enablefront)
            {
                if (capmethod == 0)
                {
                    int lChannel = 1; //通道号 Channel number

                    CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();
                    lpJpegPara.wPicQuality = 0;    //图像质量 Image quality
                    lpJpegPara.wPicSize    = 0xff; //抓图分辨率 Picture size: 2- 4CIF,0xff- Auto(使用当前码流分辨率),抓图分辨率需要设备支持,更多取值请参考SDK文档
                    uint   ipSizeReturned = 0;
                    byte[] sJpegPicBuffer = new byte[1024 * 1000];
                    //JPEG抓图 Capture a JPEG picture
                    if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(m_lUserID, lChannel, ref lpJpegPara, sJpegPicBuffer, (uint)sJpegPicBuffer.Length, ref ipSizeReturned))
                    {
                        iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                        str      = "截取前摄像头照片失败, error code= " + iLastErr;
                        ini.INIIO.saveLogInf(str);
                        //textBox1.AppendText(str + "\r\n");
                    }
                    else
                    {
                        str = "截取前摄像头照片成功";
                        ini.INIIO.saveLogInf(str);
                    }
                }
            }
            else
            {
                str = "截取前摄像头照片失败,前摄像头未使能 ";
                ini.INIIO.saveLogInf(str);
            }
        }
示例#2
0
        private void btnJPEG_Click(object sender, EventArgs e)
        {
            int lChannel = iChannelNum[(int)iSelIndex]; //通道号 Channel number

            CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();
            lpJpegPara.wPicQuality = 0;    //图像质量 Image quality
            lpJpegPara.wPicSize    = 0xff; //抓图分辨率 Picture size: 0xff-Auto(使用当前码流分辨率)
            //抓图分辨率需要设备支持,更多取值请参考SDK文档

            //JPEG抓图保存成文件 Capture a JPEG picture
            string sJpegPicFileName;

            sJpegPicFileName = "filetest.jpg";//图片保存路径和文件名 the path and file name to save

            if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture(m_lUserID, lChannel, ref lpJpegPara, sJpegPicFileName))
            {
                iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                str      = "NET_DVR_CaptureJPEGPicture failed, error code= " + iLastErr;
                DebugInfo(str);
                return;
            }
            else
            {
                str = "NET_DVR_CaptureJPEGPicture succ and the saved file is " + sJpegPicFileName;
                DebugInfo(str);
            }

            //JEPG抓图,数据保存在缓冲区中 Capture a JPEG picture and save in the buffer
            uint iBuffSize = 400000; //缓冲区大小需要不小于一张图片数据的大小 The buffer size should not be less than the picture size

            byte[] byJpegPicBuffer = new byte[iBuffSize];
            uint   dwSizeReturned  = 0;

            if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(m_lUserID, lChannel, ref lpJpegPara, byJpegPicBuffer, iBuffSize, ref dwSizeReturned))
            {
                iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                str      = "NET_DVR_CaptureJPEGPicture_NEW failed, error code= " + iLastErr;
                DebugInfo(str);
                return;
            }
            else
            {
                //将缓冲区里的JPEG图片数据写入文件 save the data into a file
                string     str  = "buffertest.jpg";
                FileStream fs   = new FileStream(str, FileMode.Create);
                int        iLen = (int)dwSizeReturned;
                fs.Write(byJpegPicBuffer, 0, iLen);
                fs.Close();

                //将图片显示到picturebox  dingyh
                picCapture.Image = Util.ByteToImage(byJpegPicBuffer);

                str = "NET_DVR_CaptureJPEGPicture_NEW succ and save the data in buffer to 'buffertest.jpg'.";
                DebugInfo(str);
            }

            return;
        }
示例#3
0
        private void btnJPEG_Click(object sender, EventArgs e)
        {
            int lChannel = iChannelNum[(int)iSelIndex];

            CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();
            lpJpegPara.wPicQuality = 0;
            lpJpegPara.wPicSize    = 0xff;



            string sJpegPicFileName;

            sJpegPicFileName = "filetest.jpg";

            if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture(m_lUserID, lChannel, ref lpJpegPara, sJpegPicFileName))
            {
                iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                str      = "NET_DVR_CaptureJPEGPicture failed, error code= " + iLastErr;
                DebugInfo(str);
                return;
            }
            else
            {
                str = "NET_DVR_CaptureJPEGPicture succ and the saved file is " + sJpegPicFileName;
                DebugInfo(str);
            }


            uint iBuffSize = 400000;

            byte[] byJpegPicBuffer = new byte[iBuffSize];
            uint   dwSizeReturned  = 0;

            if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(m_lUserID, lChannel, ref lpJpegPara, byJpegPicBuffer, iBuffSize, ref dwSizeReturned))
            {
                iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                str      = "NET_DVR_CaptureJPEGPicture_NEW failed, error code= " + iLastErr;
                DebugInfo(str);
                return;
            }
            else
            {
                string     str  = "buffertest.jpg";
                FileStream fs   = new FileStream(str, FileMode.Create);
                int        iLen = (int)dwSizeReturned;
                fs.Write(byJpegPicBuffer, 0, iLen);
                fs.Close();

                str = "NET_DVR_CaptureJPEGPicture_NEW succ and save the data in buffer to 'buffertest.jpg'.";
                DebugInfo(str);
            }

            return;
        }
示例#4
0
        private void CaptureJpeg()
        {
            int lChannel = Int32.Parse(dvrControl.dvrObject.Channel);

            CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();


            lpJpegPara.wPicQuality = captureController.captureSettingModel.PictureQuality;
            lpJpegPara.wPicSize    = captureController.captureSettingModel.PictureSize;

            //Capture a JPEG picture
            string sJpegPicFileName;

            sJpegPicFileName = "reza.jpeg";

            if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture(m_lUserID, lChannel, ref lpJpegPara, sJpegPicFileName))
            {
                iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                str      = "NET_DVR_CaptureJPEGPicture failed, error code= " + iLastErr;
                //DebugInfo(str);
                MessageControl messageControl = new MessageControl("Capture error", str);
                messageControl.ShowDialog();
                return;
            }
            else
            {
                str = "NET_DVR_CaptureJPEGPicture succ and the saved file is " + sJpegPicFileName;
                //DebugInfo(str);
            }

            byJpegPicBuffer = new byte[iBuffSize];


            if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(m_lUserID, lChannel, ref lpJpegPara, byJpegPicBuffer, iBuffSize, ref dwSizeReturned))
            {
                iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                str      = "NET_DVR_CaptureJPEGPicture_NEW failed, error code= " + iLastErr;
                //DebugInfo(str);
                MessageControl messageControl = new MessageControl("Capture error", str);
                messageControl.ShowDialog();
                return;
            }
            else
            {
                str = "NET_DVR_CaptureJPEGPicture_NEW succ and save the data in buffer to 'buffertest.jpg'.";
            }

            return;
        }
        public bool startFrontCaptureThreadToRam(ref byte[] buffer)
        {
            if (enablefront)
            {
                if (capmethod == 0)
                {
                    int lChannel = 1; //通道号 Channel number

                    CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();
                    lpJpegPara.wPicQuality = 0;    //图像质量 Image quality
                    lpJpegPara.wPicSize    = 0xff; //抓图分辨率 Picture size: 2- 4CIF,0xff- Auto(使用当前码流分辨率),抓图分辨率需要设备支持,更多取值请参考SDK文档
                    uint   ipSizeReturned = 0;
                    byte[] sJpegPicBuffer = new byte[1024 * 1000];
                    //JPEG抓图 Capture a JPEG picture
                    if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(m_lUserID, lChannel, ref lpJpegPara, sJpegPicBuffer, (uint)sJpegPicBuffer.Length, ref ipSizeReturned))
                    {
                        buffer   = null;
                        iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                        str      = "截取前摄像头照片失败, error code= " + iLastErr;
                        ini.INIIO.saveLogInf(str);
                        return(false);
                        //textBox1.AppendText(str + "\r\n");
                    }
                    else
                    {
                        buffer = new byte[ipSizeReturned];
                        Array.Copy(sJpegPicBuffer, buffer, ipSizeReturned);
                        str = "截取前摄像头照片成功";
                        ini.INIIO.saveLogInf(str);
                        return(true);
                    }
                }
                else
                {
                    buffer = null;
                    return(false);
                }
            }
            else
            {
                buffer = null;
                return(false);
            }
        }
示例#6
0
        public OResult <Byte[]> CapturePicture()
        {
            if (_userId < 0)
            {
                return(new OResult <Byte[]>(null, "用户未登录"));
            }

            try
            {
                //图片保存路径和文件名
                //var picFileName = $"User_{_userId}_{DateTimeHelper.GetTimestamp()}.jpg";

                CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();
                lpJpegPara.wPicQuality = 0;    //图像质量 Image quality
                lpJpegPara.wPicSize    = 0xff; //抓图分辨率 Picture size: 2- 4CIF,0xff- Auto(使用当前码流分辨率),抓图分辨率需要设备支持,更多取值请参考SDK文档

                //var captureSucc = CHCNetSDK.NET_DVR_CaptureJPEGPicture(_userId, _loginRequest.ChannelNo, ref lpJpegPara, picFileName);
                //if (!captureSucc)
                //{
                //    return new OResult<Byte[]>(null, $"抓图失败:{GetLastErrorCode()}");
                //}

                UInt32 iBuffSize       = 10 * 1024 * 1024; //缓冲区大小需要不小于一张图片数据的大小 The buffer size should not be less than the picture size
                Byte[] byJpegPicBuffer = new Byte[iBuffSize];
                UInt32 dwSizeReturned  = 0;

                var captureSucc = CHCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(_userId, _loginRequest.ChannelNo, ref lpJpegPara, byJpegPicBuffer, iBuffSize, ref dwSizeReturned);

                if (!captureSucc)
                {
                    return(new OResult <Byte[]>(null, HkvsErrorCode.GetLastErrorCode(), $"抓图失败:{HkvsErrorCode.GetLastErrorMessage()}"));
                }

                var data = new Byte[dwSizeReturned];

                Buffer.BlockCopy(byJpegPicBuffer, 0, data, 0, data.Length);

                return(new OResult <Byte[]>(data));
            }
            catch (Exception ex)
            {
                return(new OResult <Byte[]>(null, ex));
            }
        }
示例#7
0
        /// <summary>
        /// 获取摄像头截图
        /// </summary>
        /// <returns></returns>
        public byte[] CapturePic()
        {
            byte[] byteImage = null;

            if (IsOpen)
            {
                CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();
                lpJpegPara.wPicQuality = 0;    //图像质量 Image quality
                lpJpegPara.wPicSize    = 0xff; //抓图分辨率 Picture size: 2- 4CIF,0xff- Auto(使用当前码流分辨率),抓图分辨率需要设备支持,更多取值请参考SDK文档

                //JEPG抓图,数据保存在缓冲区中 Capture a JPEG picture and save in the buffer
                uint   iBuffSize       = 2000000; //缓冲区大小需要不小于一张图片数据的大小 The buffer size should not be less than the picture size
                byte[] byJpegPicBuffer = new byte[iBuffSize];
                uint   dwSizeReturned  = 0;
                if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(user, _Channel, ref lpJpegPara, byJpegPicBuffer, iBuffSize, ref dwSizeReturned))
                {
                    uint   iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    string str      = "摄像头调用失败,无法获取影像图片, error code= " + iLastErr;
                    throw new Exception(str);
                    //DebugInfo(str);
                    return(null);
                }
                else
                {
                    byteImage = new byte[dwSizeReturned];
                    for (int i = 0, j = (int)dwSizeReturned; i < j; i++)
                    {
                        byteImage[i] = byJpegPicBuffer[i];
                    }
                    //将缓冲区里的JPEG图片数据写入文件 save the data into a file
                    //string str = Application.StartupPath +@"\"+ name + ".jpg";
                    //FileStream fs = new FileStream(str, FileMode.Create);
                    //int iLen = (int)dwSizeReturned;
                    //fs.Write(byJpegPicBuffer, 0, iLen);
                    //fs.Close();

                    //str = "NET_DVR_CaptureJPEGPicture_NEW succ and save the data in buffer to 'buffertest.jpg'.";
                    //DebugInfo(str);
                }
            }
            return(byteImage);
        }
示例#8
0
        public override byte[] GetImageByte(string nvrip, string ipcip)
        {
            NVRInfo nvr = NVRInfos.FirstOrDefault(o => o.Host.DVRIPAddress == nvrip);

            if (nvr == null)
            {
                ErrorMsg = "NVR不存在";
                _log.Error(ErrorMsg);
            }
            int userId = nvr.Host.LUserId;
            IPC ipc    = nvr.IPCs.FirstOrDefault(o => o.ChannelIp == ipcip);

            if (ipc == null)
            {
                ErrorMsg = "IPC不存在";
                _log.Error(ErrorMsg);
            }
            int channel = ipc.ChannelIndex;

            CHCNetSDK.NET_DVR_JPEGPARA jpg = new CHCNetSDK.NET_DVR_JPEGPARA()
            {
                wPicQuality = 0, wPicSize = 2
            };
            byte[] buffer    = new byte[1024 * 1000];
            uint   dwPicSize = 1024 * 1000;
            uint   size      = 0;
            bool   re        = CHCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channel, ref jpg, buffer, dwPicSize, ref size);

            if (!re)
            {
                ErrorMsg = "获取失败" + CHCNetSDK.NET_DVR_GetLastError();
            }

            byte[] by = buffer.ToArray().Take((int)size).ToArray();
            return(by);
        }
        public Boolean threadRunning = true;                //标识线程是否运行
        //下面均对当前设备的第一个有效通道进行移动监测
        private void threadCapture()                        // 判断线程
        {
            //定义JPEG图像质量
            CHCNetSDK.NET_DVR_JPEGPARA JpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();
            JpegPara.wPicQuality = 1;
            JpegPara.wPicSize    = 9;
            byte[]             Jpeg = new byte[200 * 1024];
            uint               len  = 200 * 1024;// 200 * 1024;
            uint               Ret  = 0;
            bool               capture;
            Image <Bgr, Byte>  tempimage;                   // 缓存图片
            Image <Gray, Byte> grayimage, diffimage;        //灰度缓存图片
            MemoryStream       ms;                          // 内存流
            uint               counts, threadcounts = 8000; //异常点数目 和 阈值

            while (true)
            {
                if (m_lUserID < 0 || !threadRunning || !motiondetectonoff)   // 不运行
                {
                    Thread.Sleep(1000);
                    continue;
                }
                capture = CHCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(m_lUserID, iChannelNum[0], ref JpegPara, Jpeg, len, ref Ret);
                if (!capture)
                {
                    this.Invoke((EventHandler)(delegate
                    {
                        toolStripStatusLabel6.Text = "捕捉帧失败,错误代码" + CHCNetSDK.NET_DVR_GetLastError().ToString();
                    }));
                    return;
                }
                ms        = new MemoryStream(Jpeg);                                               //读取内存
                tempimage = new Image <Bgr, byte>((Bitmap)System.Drawing.Image.FromStream(ms));   //构造图片
                    grayimage = tempimage.Convert <Gray, Byte>();
                if (status == 0)
                { // 获得背景
                    this.Invoke((EventHandler)(delegate
                    {
                        toolStripStatusLabel6.Text = "正常预览中...";
                    }));
                    bgimage = grayimage;
                    status++;  // 下一帧
                }
                else
                {
                    switch (status)
                    {
                    case 1:      // 处理第一帧
                        diffimage = bgimage.AbsDiff(grayimage);
                        diffimage = diffimage.ThresholdBinary(new Gray(128), new Gray(255));
                        counts    = countWhite(diffimage); // 计算当前帧与背景帧的异常点个数
                        if (counts > threadcounts)
                        {                                  // 异常点个数大于1万 保存为第一帧
                            image1 = grayimage;
                            status++;
                        }
                        break;

                    case 2:      // 处理第二帧
                        diffimage = bgimage.AbsDiff(grayimage);
                        diffimage = diffimage.ThresholdBinary(new Gray(128), new Gray(255));
                        counts    = countWhite(diffimage);      // 计算当前帧与背景帧的异常点个数
                        if (counts > threadcounts)
                        {                                       // 异常点个数大于1万 保存为第2帧
                            image2    = grayimage;
                            diffimage = image1.AbsDiff(image2); // 计算第一帧第二帧是否连续
                            diffimage = diffimage.ThresholdBinary(new Gray(128), new Gray(255));
                            counts    = countWhite(diffimage);
                            if (counts > threadcounts)
                            {      // 不连续 直接报警就行了
                                // 报警
                                status = 0;
                                this.Invoke((EventHandler)(delegate     // 跨线程访问
                                {
                                    toolStripStatusLabel6.Text = "检测到移动物体";
                                    startRecord();      // 开始录像
                                }));
                            }
                            else      // 连续的话 就直接采集第三帧了
                            {
                                status++;
                            }
                        }
                        break;

                    case 3:
                        diffimage = bgimage.AbsDiff(grayimage);
                        diffimage = diffimage.ThresholdBinary(new Gray(128), new Gray(255));
                        counts    = countWhite(diffimage); // 计算当前帧与背景帧的异常点个数
                        if (counts < threadcounts)
                        {                                  //第三帧 小于10000 那么就报警吧
                            // 报警
                            status = 0;
                            this.Invoke((EventHandler)(delegate
                            {
                                toolStripStatusLabel6.Text = "检测到移动物体";
                                startRecord();      // 开始录像
                            }));
                        }
                        else      //判断第三帧和第二帧是否连续
                        {
                            image3    = grayimage;
                            diffimage = image3.AbsDiff(image2);      // 计算第3帧第二帧是否连续
                            diffimage = diffimage.ThresholdBinary(new Gray(128), new Gray(255));
                            counts    = countWhite(diffimage);
                            if (counts > 10000)
                            {      // 不连续 直接报警就行了
                                // 报警
                                status = 0;
                                this.Invoke((EventHandler)(delegate
                                {
                                    toolStripStatusLabel6.Text = "检测到移动物体";
                                    startRecord();      // 开始录像
                                }));
                            }
                            // 连续的话 就直接采集第三帧了
                            status = 0;
                        }
                        break;

                    default:
                        status = 0;    // 采集背景
                        break;
                    }

                    /*this.Invoke((EventHandler)(delegate
                     * {
                     *  toolStripStatusLabel7.Text ="报警";
                     *  diffimage = diffimage.Resize(box[1].Width, box[1].Height, 0);
                     *  box[1].Image = diffimage.ToBitmap();
                     * }));*/
                }
                Thread.Sleep(10);
            }
        }