using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using ThridLibray; namespace LibCamera { public class CameraDriver : ICameraDriver { public event OnCameraImage OnCameraImage; private IDevice m_dev_cam; private bool camOpened; public void Initialize(string serial, string pixelFormat, double exposure, double gain) { try { camOpened = false; List deviceList = Enumerator.EnumerateDevices(); m_dev_cam = Enumerator.GetDeviceByKey(serial); if (m_dev_cam == null) return; if (!m_dev_cam.Open()) return; using (IEnumParameter p = m_dev_cam.ParameterCollection[ParametrizeNameSet.ImagePixelFormat]) { p.SetValue(pixelFormat); } using (IFloatParameter p = m_dev_cam.ParameterCollection[ParametrizeNameSet.ExposureTime]) { p.SetValue(exposure); } using (IFloatParameter p = m_dev_cam.ParameterCollection[ParametrizeNameSet.GainRaw]) { p.SetValue(gain); } using (IEnumParameter p = m_dev_cam.ParameterCollection[ParametrizeNameSet.AcquisitionMode]) { p.SetValue("Continuous"); } using (IEnumParameter p = m_dev_cam.ParameterCollection[ParametrizeNameSet.TriggerMode]) { p.SetValue("On"); } m_dev_cam.StreamGrabber.ImageGrabbed += StreamGrabber_ImageGrabbed; m_dev_cam.TriggerSet.Open(TriggerSourceEnum.Software); if (!m_dev_cam.GrabUsingGrabLoopThread()) return; camOpened = true; } catch (Exception ex) { camOpened = false; m_dev_cam = null; } } private void StreamGrabber_ImageGrabbed(object sender, GrabbedEventArgs e) { OnCameraImage?.Invoke(e.GrabResult.ToBitmap(true)); } public void Stop() { if (!IsOpened()) return; m_dev_cam.StreamGrabber.ImageGrabbed -= StreamGrabber_ImageGrabbed; m_dev_cam.ShutdownGrab(); m_dev_cam.Dispose(); m_dev_cam = null; } public void GrabImage() { if (!IsOpened()) return; m_dev_cam?.ExecuteSoftwareTrigger(); } public bool IsOpened() { return m_dev_cam != null && camOpened; } } }