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); } }
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; }
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; }
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); } }
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)); } }
/// <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); }
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); } }