private void btn_CameraOperator_Click(object sender, EventArgs e) { if (m_Grabber != IntPtr.Zero) { MvApi.CameraGrabber_StartLive(m_Grabber); } }
private void btn_GrabPhoto_Click(object sender, EventArgs e) { if (m_Grabber != IntPtr.Zero) { MvApi.CameraGrabber_StopLive(m_Grabber); } }
private void btn_CameraSwitch_Click(object sender, EventArgs e) { HDevWindowStack.Push(hv_WindowHandle); if (m_Grabber_1 != IntPtr.Zero || m_Grabber_2 != IntPtr.Zero) { if (CameraSwitch) { label_CameraNo.Text = "2"; if (m_Grabber_1 != IntPtr.Zero) { MvApi.CameraGrabber_StopLive(m_Grabber_1); } if (m_Grabber_2 != IntPtr.Zero) { MvApi.CameraGrabber_StartLive(m_Grabber_2); } CameraSwitch = false; } else { label_CameraNo.Text = "1"; if (m_Grabber_2 != IntPtr.Zero) { MvApi.CameraGrabber_StopLive(m_Grabber_2); } if (m_Grabber_1 != IntPtr.Zero) { MvApi.CameraGrabber_StartLive(m_Grabber_1); } CameraSwitch = true; } } }
public override void SetExtTrigger() { try { CameraSdkStatus st = MvApi.CameraSetExtTrigSignalType(m_hCamera, 1);//下降沿触发 st = MvApi.CameraSetTriggerMode(m_hCamera, (int)emSdkSnapMode.EXTERNAL_TRIGGER); st = MvApi.CameraSetTriggerDelayTime(m_hCamera, (uint)triggerDelayAbs); //m_pOperator.SetEnumValue("ExposureAuto", 0); //m_pOperator.SetFloatValue("TriggerDelay", (float)triggerDelayAbs); st = MvApi.CameraSetExtTrigJitterTime(m_hCamera, (uint)LineDebouncerTimeAbs); //m_pOperator.SetIntValue("LineDebouncerTime", (uint)LineDebouncerTimeAbs); Command = Command.ExtTrigger; IsExtTrigger = true; } catch (Exception ex) { Util.WriteLog(this.GetType(), ex); Util.Notify("相机外触发设置异常"); } }
public override bool Open() { try { m_FrameListener = new pfnCameraGrabberFrameListener(CameraGrabberFrameListener); //图像镜像设置 MvApi.CameraSetMirror(m_hCamera, 0, 0); MvApi.CameraSetMirror(m_hCamera, 1, 0); MvApi.CameraGrabber_SetFrameListener(m_Grabber, m_FrameListener, IntPtr.Zero); ContinuousShotStop(); GetCameraSettingData(); MvApi.CameraGrabber_StartLive(m_Grabber); MvApi.CameraSetOutPutIOMode(m_hCamera, 0, (int)emCameraGPIOMode.IOMODE_GP_OUTPUT); MvApi.CameraSetIOState(m_hCamera, 0, 1); // Reset the stopwatch used to reduce the amount of displayed images. The camera may acquire images faster than the images can be displayed //stopWatch.Reset(); IsLink = true; } catch (Exception ex) { Util.WriteLog(this.GetType(), ex); Util.Notify("相机打开出现异常"); throw ex; } return(true); }
private void checkOnlineTimer_Tick(object sender, EventArgs e) { HTuple newHandle = hv_AcqHandle.H.TupleIsValidHandle(); CameraSdkStatus status = MvApi.CameraConnectTest(newHandle); if (status != 0) { HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "trigger_mode", 1); camStatus.Text = "相机已掉线 正在重连中..."; camStatus.ForeColor = Color.Red; button2.Text = "开启"; modelList.Enabled = true; btnAddModel.Enabled = false; button2.Enabled = false; MvApi.CameraReConnect(newHandle); } else { camStatus.Text = "上线"; camStatus.ForeColor = Color.Green; button2.Enabled = true; if (button2.Text == "开启") { btnAddModel.Enabled = true; } } }
public override bool Open() { try { m_FrameListener = new pfnCameraGrabberFrameListener(CameraGrabberFrameListener); m_CameraConnectionStatusCallback = new CAMERA_CONNECTION_STATUS_CALLBACK(CameraConnectionStatusCallback); //图像镜像设置,第三个参数代表是否镜像。 //MvApi.CameraSetMirror(m_hCamera, 0, 1); //Collumn镜像 MvApi.CameraSetMirror(m_hCamera, 1, 1); //Row镜像 MvApi.CameraGrabber_SetFrameListener(m_Grabber, m_FrameListener, IntPtr.Zero); MvApi.CameraSetConnectionStatusCallback(m_hCamera, m_CameraConnectionStatusCallback, IntPtr.Zero); ContinuousShotStop(); GetCameraSettingData(); MvApi.CameraGrabber_StartLive(m_Grabber); MvApi.CameraSetOutPutIOMode(m_hCamera, 0, (int)emCameraGPIOMode.IOMODE_GP_OUTPUT); MvApi.CameraSetIOState(m_hCamera, 0, 1); // Reset the stopwatch used to reduce the amount of displayed images. The camera may acquire images faster than the images can be displayed //stopWatch.Reset(); IsLink = true; } catch (Exception ex) { Util.WriteLog(this.GetType(), ex); Util.Notify("相机打开出现异常"); return(false); throw ex; //不能随便屏蔽,否则上层接收不到异常,会接着执行函数下面原先不应该执行的部分。 } return(true); }
public void UpdateImage(ref tSdkFrameHead tFrameHead, IntPtr pRgbBuffer) { SnapshotBox.Width = tFrameHead.iWidth; SnapshotBox.Height = tFrameHead.iHeight; SnapshotBox.Image = MvApi.CSharpImageFromFrame(pRgbBuffer, ref tFrameHead); panel1.AutoScroll = true; }
public override void ContinuousShotStop() { try { // Set an enum parameter. if (m_Grabber == IntPtr.Zero) { return; } CameraSdkStatus status; CameraSdkStatus st = MvApi.CameraSetExtTrigSignalType(m_hCamera, 1);//上升沿触发 status = MvApi.CameraSetTriggerMode(m_hCamera, (int)emSdkSnapMode.SOFT_TRIGGER); IsContinuousShot = false; IsExtTrigger = false; Task.Run(() => { ignoreImage = true; Thread.Sleep(1000); ignoreImage = false; }); } catch (Exception ex) { Util.WriteLog(this.GetType(), ex); Util.Notify("相机连续采集停止异常"); } }
public bool InitCamera() { const int MAX_CAMS = 2; tSdkCameraDevInfo[] sCameraList = null; int iCameraNums = MAX_CAMS; tSdkCameraCapbility sCameraInfo = new tSdkCameraCapbility(); CameraSdkStatus status = MvApi.CameraEnumerateDevice(out sCameraList); if (status != CameraSdkStatus.CAMERA_STATUS_SUCCESS || iCameraNums == 0) { return(false); } //只假设连接了一个相机。 if ((status = MvApi.CameraInit(ref sCameraList[0], -1, -1, ref m_hCamera)) != CameraSdkStatus.CAMERA_STATUS_SUCCESS) { string msg = string.Format("***Failed to init the camera! Error code is {0}", status); WinCall.TraceMessage(msg); return(false); } //Get properties description for this camera. MvApi.CameraGetCapability(m_hCamera, out sCameraInfo); m_ImageBufferSnapshot = Marshal.AllocHGlobal(sCameraInfo.sResolutionRange.iWidthMax * sCameraInfo.sResolutionRange.iHeightMax * 3 + 1024); return(true); }
private void InitCamera() { CameraSdkStatus status = 0; tSdkCameraDevInfo[] DevList; MvApi.CameraEnumerateDevice(out DevList); int NumDev = (DevList != null ? DevList.Length : 0); if (NumDev < 1) { MessageBox.Show("未扫描到相机"); return; } else if (NumDev == 1) { status = MvApi.CameraGrabber_Create(out m_Grabber, ref DevList[0]); } else //选择哪个相机 { status = MvApi.CameraGrabber_CreateFromDevicePage(out m_Grabber); } if (status == 0) { //获得相机的描述信息 MvApi.CameraGrabber_GetCameraDevInfo(m_Grabber, out m_DevInfo); //获得相机的句柄 MvApi.CameraGrabber_GetCameraHandle(m_Grabber, out m_hCamera); //sheshe设置相机配置窗口的启动页面 MvApi.CameraCreateSettingPage(m_hCamera, this.Handle, m_DevInfo.acFriendlyName, null, (IntPtr)0, 0); //设置RGB回调函数 MvApi.CameraGrabber_SetRGBCallback(m_Grabber, m_FrameCallback, IntPtr.Zero); tSdkCameraCapbility cap; //黑白相机设置ISP输出灰度图像 //彩色相机ISP默认输出BGR24图像 //获得相机特性 MvApi.CameraGetCapability(m_hCamera, out cap); //表示该型号相机是否为黑白相机,如果是黑白相机,则颜色相关的功能都无法调节 if (cap.sIspCapacity.bMonoSensor != 0) { MvApi.CameraSetIspOutFormat(m_hCamera, (uint)MVSDK.emImageFormat.CAMERA_MEDIA_TYPE_MONO8); //创建灰度调色板 Bitmap Image = new Bitmap(1, 1, PixelFormat.Format8bppIndexed); m_GrayPal = Image.Palette; for (int Y = 0; Y < m_GrayPal.Entries.Length; Y++) { m_GrayPal.Entries[Y] = Color.FromArgb(255, Y, Y, Y); } } //设置vflip,由于sdk输出的数据默认是从底部到顶部,打开flip后就可以直接转成bitmap MvApi.CameraSetMirror(m_hCamera, 1, 1); // MvApi.CameraGrabber_StartLive(m_Grabber); } else { MessageBox.Show(String.Format("打开相机失败,原因:{0}", status)); } }
/// <summary> /// 打开两个相机 即初始化 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_OpenTwoCameras_Click(object sender, EventArgs e) { //初始化相机 InitCamera(); label_CameraNo.Text = "1"; if (m_Grabber_1 != IntPtr.Zero) { MvApi.CameraGrabber_StartLive(m_Grabber_1); } }
internal static List <CameraDevice> GetAllCamera() { tSdkCameraDevInfo[] tCameraDevInfoList; MvApi.CameraEnumerateDevice(out tCameraDevInfoList); if (tCameraDevInfoList != null && tCameraDevInfoList.Length > 0) { CameraDevice device = new CameraDevice(); } return(null); }
void UnInitCamera() { if (0 != m_hCamera) { MvApi.CameraStop(m_hCamera); MvApi.CameraUnInit(m_hCamera); } Marshal.FreeHGlobal(m_ImageBufferSnapshot); m_ImageBufferSnapshot = IntPtr.Zero; }
private void btn_TwoCameras_Find_Photos_Click(object sender, EventArgs e) { if (m_Grabber_1 != IntPtr.Zero || m_Grabber_2 != IntPtr.Zero) { HDevWindowStack.Push(hv_WindowHandle_1); HDevWindowStack.Push(hv_WindowHandle_2); MvApi.CameraGrabber_StartLive(m_Grabber_2); MvApi.CameraGrabber_StartLive(m_Grabber_1); } }
private void button4_Click(object sender, EventArgs e) { if (m_Grabber_1 != IntPtr.Zero) { MvApi.CameraGrabber_StopLive(m_Grabber_1); } if (m_Grabber_2 != IntPtr.Zero) { MvApi.CameraGrabber_StopLive(m_Grabber_2); } }
protected override void GetCameraSettingData() { try { tSdkCameraCapbility cap; MvApi.CameraGetCapability(m_hCamera, out cap); if (cap.sIspCapacity.bMonoSensor == 1) { MvApi.CameraSetIspOutFormat(m_hCamera, (uint)emImageFormat.CAMERA_MEDIA_TYPE_MONO8); } else { MvApi.CameraSetIspOutFormat(m_hCamera, (uint)emImageFormat.CAMERA_MEDIA_TYPE_RGB8); } //long max, min, cur; gainMin = cap.sExposeDesc.uiAnalogGainMin; gainMax = cap.sExposeDesc.uiAnalogGainMax; int piAnalogGain = 0; MvApi.CameraGetAnalogGain(m_hCamera, ref piAnalogGain); gainCur = piAnalogGain; gainUnit = ""; shuterUnit = "us"; shuterMin = cap.sExposeDesc.uiExposeTimeMin; shuterMax = cap.sExposeDesc.uiExposeTimeMax; double pfLineTime = 0; MvApi.CameraGetExposureLineTime(m_hCamera, ref pfLineTime); shuterCur = (long)pfLineTime; triggerDelayAbsMin = 0; triggerDelayAbsMax = 1000000; uint puDelayTimeUs = 0; MvApi.CameraGetTriggerDelayTime(m_hCamera, ref puDelayTimeUs); triggerDelayAbs = puDelayTimeUs; lineDebouncerTimeAbsMin = 0; lineDebouncerTimeAbsMax = 5000; lineDebouncerTimeAbs = 0; byte[] psCameraName = new byte[255]; MvApi.CameraGetFriendlyName(m_hCamera, psCameraName); CameraName = System.Text.Encoding.ASCII.GetString(psCameraName); } catch (Exception ex) { Util.WriteLog(this.GetType(), ex); Util.Notify("相机设置信息获取异常"); } }
public void CameraStop() { if (m_Grabber != IntPtr.Zero) { MvApi.CameraGrabber_StopLive(m_Grabber); } if (t1.Status != TaskStatus.Canceled) { cts.Cancel(); clearFlage = false; } }
private void btn_TwoCameras_Snap_Click(object sender, EventArgs e) { HDevWindowStack.Push(hv_WindowHandle); if (m_Grabber_1 != IntPtr.Zero) { MvApi.CameraGrabber_StopLive(m_Grabber_1); } if (m_Grabber_2 != IntPtr.Zero) { MvApi.CameraGrabber_StopLive(m_Grabber_2); } }
private void btn_CurrentCameraPhoto_Click(object sender, EventArgs e) { HDevWindowStack.Push(hv_WindowHandle); if (m_Grabber_1 != IntPtr.Zero || m_Grabber_2 != IntPtr.Zero) { if (label_CameraNo.Text == "2") { MvApi.CameraGrabber_StartLive(m_Grabber_2); } else { MvApi.CameraGrabber_StartLive(m_Grabber_1); } } }
/// <summary> /// 迈德威视相机采集到图像回调处理函数 /// </summary> /// <param name="Grabber"></param> /// <param name="pFrameBuffer"></param> /// <param name="pFrameHead"></param> /// <param name="Context"></param> private void OnSDKImageGrabbed(IntPtr Grabber, IntPtr pFrameBuffer, ref tSdkFrameHead pFrameHead, IntPtr Context) { if (HoImage != null && HoImage.IsInitialized()) { HoImage = null; //System.Threading.Thread.Sleep(1); //GC.Collect(); //GC.WaitForPendingFinalizers(); IsImageGrabbed = false; } #region 迈德威视相机SDK内部像素格式转换 // 由于黑白相机在相机打开后设置了ISP输出灰度图像 // 因此此处pFrameBuffer=8位灰度数据 // 否则会和彩色相机一样输出BGR24数据 // 彩色相机ISP默认会输出BGR24图像 // pFrameBuffer=BGR24数据 int w = pFrameHead.iWidth; int h = pFrameHead.iHeight; if (pFrameHead.uiMediaType == (uint)MVSDK.emImageFormat.CAMERA_MEDIA_TYPE_MONO8) { HalconDotNet.HOperatorSet.GenImage1(out HoImage, "byte", w, h, pFrameBuffer); } else if (pFrameHead.uiMediaType == (uint)MVSDK.emImageFormat.CAMERA_MEDIA_TYPE_BGR8) { HalconDotNet.HOperatorSet.GenImageInterleaved(out HoImage, pFrameBuffer, "bgr", w, h, -1, "byte", w, h, 0, 0, -1, 0); } MvApi.CameraClearBuffer(_deviceRef); #endregion if (HoImage != null && HoImage.IsInitialized()) { System.Threading.Thread.Sleep(1); IsImageGrabbed = true; if (CameraImageGrabbedEvt != null) { CameraImageGrabbedEvt(Camera, HoImage); } } }
public Bitmap QueryFrame(uint wTimes = 1000) { tSdkFrameHead tFrameHead; IntPtr uRawBuffer; Bitmap bmFrame = null; if (MvApi.CameraSnapToBuffer(m_hCamera, out tFrameHead, out uRawBuffer, 800) == CameraSdkStatus.CAMERA_STATUS_SUCCESS) { //将相机输出的原始数据转换为RGB格式到内存m_ImageBufferSnapshot中 MvApi.CameraImageProcess(m_hCamera, uRawBuffer, m_ImageBufferSnapshot, ref tFrameHead); MvApi.CameraReleaseImageBuffer(m_hCamera, uRawBuffer); Image img = MvApi.CSharpImageFromFrame(m_ImageBufferSnapshot, ref tFrameHead); bmFrame = (Bitmap)img; } return(bmFrame); }
private int InitCamera() { int m_hCamera = -1; tSdkCameraDevInfo[] m_DevInfo = new tSdkCameraDevInfo[] { new tSdkCameraDevInfo() }; MvApi.CameraEnumerateDevice(out m_DevInfo); if (m_DevInfo != null) { IntPtr m_Grabber = new IntPtr(); if (MvApi.CameraGrabber_Create(out m_Grabber, ref m_DevInfo[0]) == CameraSdkStatus.CAMERA_STATUS_SUCCESS) { MvApi.CameraGrabber_GetCameraHandle(m_Grabber, out m_hCamera); } } return(m_hCamera); }
public override void Close() { try { IsLink = false; // Reset the stopwatch. //stopWatch.Reset(); if (m_Grabber != IntPtr.Zero) { MvApi.CameraGrabber_Destroy(m_Grabber); } } catch (Exception ex) { Util.WriteLog(this.GetType(), ex); Util.Notify("相机关闭异常"); } }
public override void OneShot(Command command) { try { if (IsContinuousShot || IsExtTrigger) { ContinuousShotStop(); } Command = command; CameraSdkStatus status; //status = MvApi.CameraSetTriggerMode(m_hCamera, (int)emSdkSnapMode.SOFT_TRIGGER); status = MvApi.CameraSoftTrigger(m_hCamera); } catch { IsLink = false; Util.Notify("相机软触发异常"); } }
public void CameraStart() { if (m_Grabber != IntPtr.Zero) { MvApi.CameraGrabber_StartLive(m_Grabber); } try { var ct = cts.Token; t1 = new Task(() => { ClearList(ct); }, ct); } catch (MyException ex) { MessageBox.Show("task" + ex.ToString()); } if (t1.Status == TaskStatus.Canceled) { t1.Start(); clearFlage = true; } }
public override void Close() { try { IsLink = false; // Reset the stopwatch. //stopWatch.Reset(); if (m_Grabber != IntPtr.Zero) { MvApi.CameraGrabber_StopLive(m_Grabber); MvApi.CameraGrabber_Destroy(m_Grabber); } m_Grabber = IntPtr.Zero; } catch (Exception ex) { //Util.WriteLog(this.GetType(), ex); Util.Notify("相机关闭异常"); throw ex; //抛给上层,上层捕获到该异常,不会执行其函数余下的代码; } }
public override void Output() { if (inOutPut) { Util.Notify("报警输出中当前输出忽略"); return; } Task.Run(() => //这段代码执行采用异步操作。 { lock (lockObj1) { inOutPut = true; MvApi.CameraSetIOState(m_hCamera, 0, 0); //第一个0表示0点。第二个点表示:1为高电平(断开);0为低电平(导通)。 Thread.Sleep((int)outLineTime); MvApi.CameraSetIOState(m_hCamera, 0, 1); //1表示0号点设为高电平,即为断开。 //g_camera.Parameters[PLCamera.timer].TrySetValue(PLCamera.LineSource.Timer1Active.); Util.Notify("相机报警输出完成"); inOutPut = false; } }); }
public override void ContinuousShot() { if (m_Grabber == IntPtr.Zero) { return; } try { Command = Command.Video; MvApi.CameraSetTriggerMode(m_hCamera, (int)emSdkSnapMode.CONTINUATION); CameraSdkStatus suatus = MvApi.CameraGrabber_StartLive(m_Grabber); if (suatus != CameraSdkStatus.CAMERA_STATUS_SUCCESS) { Util.Notify("相机连续采集开始异常"); } IsContinuousShot = true; } catch (Exception ex) { Util.WriteLog(this.GetType(), ex); Util.Notify("相机连续采集开始异常"); } }
public override void Output() { if (inOutPut) { Util.Notify("报警输出中当前输出忽略"); return; } // Task.Run(() => { lock (lockObj1) { inOutPut = true; MvApi.CameraSetIOState(m_hCamera, 0, 0); Thread.Sleep((int)outLineTime); MvApi.CameraSetIOState(m_hCamera, 0, 1); //g_camera.Parameters[PLCamera.timer].TrySetValue(PLCamera.LineSource.Timer1Active.); Util.Notify("相机报警输出完成"); inOutPut = false; } }); }