天天看点

Basler相机

Basler相机

using System;     using System.Collections.Generic;     using System.Linq;     using System.Text;     using System.Threading.Tasks;     using Basler.Pylon;     using System.Windows.Forms;     using System.Drawing;     using System.IO;     using System.Diagnostics;     using System.Threading;     using HalconDotNet;     namespace Lead     {         public class Basler_SDK_Mono         {             public Camera camera;             public Bitmap bitmap;             public Bitmap CopyBitmap;             private int CameraIndex;             public bool GrabFlag = false;             // Basler.Pylon.PixelDataConverter _conveter;             AutoResetEvent _resetEvent = new AutoResetEvent(true);             public Basler_SDK_Mono(string CameraSN, int Camera_Index)             {                 try                 {                     camera = new Camera(CameraSN);                     this.CameraIndex = Camera_Index;                 }                 catch                 {                 }             }             //打开相机             public bool OpenCamera()             {                 try                 {                     if (!camera.IsOpen)                     {                         camera.Open();                         camera.StreamGrabber.ImageGrabbed += OnImageGrabbed;                         camera.Parameters[PLCamera.TriggerSelector].TrySetValue("FrameStart");                         camera.Parameters[PLCamera.TriggerMode].TrySetValue("On");                         camera.Parameters[PLCamera.TriggerSource].TrySetValue("Software");                         camera.Parameters[PLCamera.TriggerActivation].TrySetValue("Falling Edge");                         //camera.Parameters[PLCamera.FrameTimeoutAbs].TrySetValue(20000);                         camera.StreamGrabber.Start(GrabStrategy.LatestImages, GrabLoop.ProvidedByStreamGrabber);                         BitmapFactory.CreateBitmap(out bitmap, (int)camera.Parameters[PLCamera.Width].GetValue(), (int)camera.Parameters[PLCamera.Height].GetValue(), false);                         //switch (CameraIndex)                         //{                         //    case 1:                         //        {                         //            SetCameraParam("ExposureTimeAbs", "600");                         //        }                         //        break;                         //    case 2:                         //        {                         //            SetCameraParam("ExposureTimeAbs", "600");                         //        }                         //        break;                         //    case 3:                         //        {                         //            SetCameraParam("ExposureTimeAbs", "600");                         //        }                         //        break;                         //    default:                         //        break;                         //}                     }                     return true;                 }                 catch (Exception ex)                 {                     return false;                 }             }             //开始采集             public bool StartStream()             {                 try                 {                     if (camera.IsOpen)                     {                         camera.StreamGrabber.Start(GrabStrategy.LatestImages, GrabLoop.ProvidedByStreamGrabber);                     }                     return true;                 }                 catch (Exception ex)                 {                     return false;                 }             }             public bool StopStream()             {                 try                 {                     if (camera.StreamGrabber.IsGrabbing)                     {                         camera.StreamGrabber.Stop();                      }                     return true;                 }                 catch (Exception ex)                 {                     return false;                 }             }             //抓取图像             //object LockObj = new object();             private void OnImageGrabbed(Object sender, ImageGrabbedEventArgs e)             {                 try                 {                     IGrabResult grabResult = e.GrabResult;                     long ImageNo = grabResult.ImageNumber;                     if (grabResult.GrabSucceeded)                     {                         Debug.WriteLine(grabResult.ImageNumber);                         byte[] buffer = grabResult.PixelData as byte[];                         BitmapFactory.UpdateBitmap(bitmap, buffer, grabResult.Width, grabResult.Height, false);                         CopyBitmap = (Bitmap)bitmap.Clone();                         打开图像处理线程                         //Task RunToolBlock_1 = new Task(() => MachineMaster.Camera1_Run());                         //Task RunToolBlock_2 = new Task(() => MachineMaster.Camera2_Run());                         //Task RunToolBlock_3 = new Task(() => MachineMaster.Camera3_Run());                         switch (CameraIndex)                         {                             case 1:                                 //离线存图                                 MachineMaster.halcon.ho_ShowImage1 = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap);                                 {                                     switch (MachineMaster.strBGside+MachineMaster.strLightNo)                                     {                                         case "S1":                                             if (MachineMaster.AutoRunEnable_Camera1 && MachineMaster.AutoRunFlag_Camera1)                                             {                                                 ImageInfo ImageInfo = new ImageInfo() { Image = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), Index = ImageNo };                                                 if (MachineMaster.LstImage_1.Find(x => x.Index == ImageNo) == null)                                                 {                                                     MachineMaster.LstImage_1.Add(ImageInfo);                                                 }                                                 new Action(() =>                                                 {                                                     MachineMaster.VImageProcess_1_1(MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), ImageNo);                                                 }).BeginInvoke(null, null);                                             }                                             break;                                         case "S2":                                             if (MachineMaster.AutoRunEnable_Camera1 && MachineMaster.AutoRunFlag_Camera1)                                             {                                                 ImageInfo ImageInfo = new ImageInfo() { Image = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), Index = ImageNo };                                                 if (MachineMaster.LstImage_1.Find(x => x.Index == ImageNo) == null)                                                 {                                                     MachineMaster.LstImage_1.Add(ImageInfo);                                                 }                                                 new Action(() =>                                                 {                                                     MachineMaster.VImageProcess_1_2(MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), ImageNo);                                                 }).BeginInvoke(null, null);                                             }                                             break;                                         case "S1;2":                                             if (MachineMaster.AutoRunEnable_Camera1 && MachineMaster.AutoRunFlag_Camera1)                                             {                                                 ImageInfo ImageInfo = new ImageInfo() { Image = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), Index = ImageNo };                                                 if (MachineMaster.LstImage_1.Find(x => x.Index == ImageNo) == null)                                                 {                                                     MachineMaster.LstImage_1.Add(ImageInfo);                                                 }                                                 new Action(() =>                                                 {                                                     //MachineMaster.VImageProcess_1_12(MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), ImageNo);                                                 }).BeginInvoke(null, null);                                             }                                             break;                                         default:                                             break;                                     }                                                            }                                 break;                             case 2:                                 {                                     MachineMaster.halcon.ho_ShowImage2 = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap);                                     switch (MachineMaster.strLightNo)                                     {                                         case "1":                                             if (MachineMaster.AutoRunEnable_Camera2 && MachineMaster.AutoRunFlag_Camera2)                                             {                                                 ImageInfo ImageInfo = new ImageInfo() { Image = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), Index = ImageNo };                                                 if (MachineMaster.LstImage_1.Find(x => x.Index == ImageNo) == null)                                                 {                                                     MachineMaster.LstImage_1.Add(ImageInfo);                                                 }                                                 new Action(() =>                                                 {                                                    // MachineMaster.ImageProcess_2_1(MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), ImageNo);                                                 }).BeginInvoke(null, null);                                             }                                             break;                                         case "2":                                             if (MachineMaster.AutoRunEnable_Camera2 && MachineMaster.AutoRunFlag_Camera2)                                             {                                                 ImageInfo ImageInfo = new ImageInfo() { Image = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), Index = ImageNo };                                                 if (MachineMaster.LstImage_1.Find(x => x.Index == ImageNo) == null)                                                 {                                                     MachineMaster.LstImage_1.Add(ImageInfo);                                                 }                                                 new Action(() =>                                                 {                                                     //MachineMaster.ImageProcess_2_2(MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), ImageNo);                                                 }).BeginInvoke(null, null);                                             }                                             break;                                         default:                                             break;                                         }                                     }                                 break;                         }                         GrabFlag = true;                         _resetEvent.Set();                     }                     else                     {                         //MessageBox.Show("grabResult.NoGrabSucceeded");                         _resetEvent.Set();                     }                 }                 catch (Exception ex)                 {                     MessageBox.Show(ex.Message);                 }             }             public bool StartGrab()             {                 try                 {                     if (camera == null)                     {                         return false;                     }                     if (!camera.IsOpen)                     {                         return false;                     }                     int index = 1;                     while (true)                     {                         if (index == 10)                         {                             throw new Exception("Fail to WaitForFrameTriggerReady!");                         }                         if (false == camera.WaitForFrameTriggerReady(100, TimeoutHandling.Return))                         {                             index++;                             Thread.Sleep(50);                             continue;                         }                         _resetEvent.Reset();                         camera.ExecuteSoftwareTrigger();                         _resetEvent.WaitOne();                         break;                     }                     //if (camera.WaitForFrameTriggerReady(100, TimeoutHandling.ThrowException))                     //{                     //    _resetEvent.Reset();                     //    camera.ExecuteSoftwareTrigger();                     //    _resetEvent.WaitOne();                     //}                     if (!GrabFlag)                     {                         Thread.Sleep(300);                         index = 1;                         while (true)                         {                             if (index == 10)                             {                                 throw new Exception("Fail to WaitForFrameTriggerReady!");                             }                             if (!camera.WaitForFrameTriggerReady(1000, TimeoutHandling.Return))                             {                                 index++;                                 Thread.Sleep(50);                                 continue;                             }                             _resetEvent.Reset();                             camera.ExecuteSoftwareTrigger();                             _resetEvent.WaitOne();                             break;                         }                     }                     return true;                 }                 catch (Exception ex)                 {                     MessageBox.Show(ex.Message);                     return false;                 }             }             public bool SetCameraParam(string ParamType, string ParamValue)             {                 try                 {                     switch (ParamType)                     {                         case "ExposureTimeAbs":                             {                                 if (!camera.Parameters[PLCamera.ExposureTimeAbs].TrySetValue(double.Parse(ParamValue)))                                 {                                     return false;                                 }                             }                             break;                         case "TriggerSource":                             {                                 if (!camera.Parameters[PLCamera.TriggerSource].TrySetValue(ParamValue))                                 {                                     return false;                                 }                             }                             break;                         default:                             break;                     }                     return true;                 }                 catch (Exception e)                 {                     MessageBox.Show(e.ToString());                     return false;                 }             }             //关闭相机             public void CloseCamera()             {                 try                 {                     if (camera == null)                         return;                     //if (camera.StreamGrabber.IsGrabbing)                     //{                     //    camera.StreamGrabber.Stop();                     //}                     if (camera.IsOpen)                     {                         camera.Close();                     }                 }                 catch (Exception e)                 {                     MessageBox.Show(e.Message);                 }             }         }     }