using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Drawing; using FlyCapture2Managed; using System.Threading; namespace M423project { /// /// 利用Flycapture库连接的相机 /// public class FlyCaptureCamera : CameraBase { // 摄像机序列号 public string SerialNum {get;set;} // 抓拍或扫描到的图片 public ManagedImage Image { get { return (ManagedImage)base.ImageObj; } set { base.ImageObj = value; } } // 图片像素格式 public PixelFormat PixFormat { get; set; } // 取景相机 protected ManagedCamera cam = null; public double ExposureValue { get; set; } public double GainValue { get; set; } public FlyCaptureCamera(double _exposureValue, double _gainValue) { this.SerialNum = ""; this.Image = null; ExposureValue = _exposureValue;// 4.97; GainValue = _gainValue;// 1.9; this.PixFormat = PixelFormat.PixelFormatMono8; this.cam = new ManagedCamera(); } /// /// 相机初始化 /// /// public override bool Init() { if (base.IsInit) { return true; } try { //ManagedBusManager.ForceAllIPAddressesAutomatically(Convert.ToUInt32(SerialNum)); base.Init(); } catch (Exception e) { CommonUtil.WriteLog(LogType.Exc, string.Format("{0} Init fail, serialNum:{1} ex:{2}", Desp, SerialNum, e.Message)); return false; } return true; } /// /// 打开 /// /// public override bool Open() { if (base.IsOpen) { return true; } try { var busManager = new ManagedBusManager(); var guid = busManager.GetCameraFromSerialNumber(Convert.ToUInt32(SerialNum)); cam.Connect(guid); InitParams(); SetShutter(ExposureValue); SetGain(GainValue); base.Open(); return true; } catch(Exception ex) { cam = null; CommonUtil.WriteLog(LogType.Exc, string.Format("FlayCaptureCamera serialNum{0} open fail, ex:{1}", SerialNum, ex.Message)); } return false; } public void SetShutter(double ShutterVal) { try { CameraProperty campara = cam.GetProperty(PropertyType.Shutter); campara.absControl = true; campara.autoManualMode = false; campara.absValue = (float)ShutterVal; cam.SetProperty(campara); } catch(Exception ) { } } public void SetGain(double gainVal) { try { CameraProperty campara = cam.GetProperty(PropertyType.Gain); campara.absControl = true; campara.autoManualMode = false; campara.absValue = (float)gainVal; cam.SetProperty(campara); } catch(Exception ) { } } /// /// 关闭 /// public override void Close() { if (!base.IsOpen) { return; } if ( null == cam ) { return; } try { cam.Disconnect(); cam = null; base.Close(); } catch(Exception ex) { CommonUtil.WriteLog(LogType.Exc, string.Format("FlayCaptureCamera serialNum:{0} Close fail, ex:{1}", SerialNum, ex.Message)); } } /// /// 开始抓拍 /// public override bool Snapshot() { if (!base.IsOpen) { CommonUtil.WriteLog(LogType.Exc, string.Format("FlayCaptureCamera serialNum:{0} Snapshot fail, not open", SerialNum)); return false; } try { cam.StartCapture(); System.Threading.Thread.Sleep(20); GrabImage(); cam.StopCapture(); return true; } catch(Exception ex) { CommonUtil.WriteLog(LogType.Exc, string.Format("FlayCaptureCamera serialNum:{0} StartCapture fail, ex:{1}", SerialNum, ex.Message)); } return false; } /// /// 从摄像机抓取图像 ///// /// public void GrabImage() { try { var curImage = new ManagedImage(); var rawImage = new ManagedImage(); this.FreeImage(); // Retrieve an image cam.RetrieveBuffer(rawImage); // Convert the raw image rawImage.Convert(this.PixFormat, curImage); this.Image = curImage; this.NotifyImageEvent(); rawImage.Dispose(); } catch (Exception ex) { CommonUtil.WriteLog(LogType.Exc, string.Format("FlayCaptureCamera serialNum:{0} GrabImage fail, ex:{1}", SerialNum, ex.Message)); } } /// /// 释放图片数据 /// protected override void FreeImage() { if (null != this.Image) { this.Image.Dispose(); this.Image = null; } } /// /// 把抓拍图片转成bitmap图片 /// /// public override Bitmap GetBitmap() { if (null == this.Image) { return null; } return this.Image.bitmap; } } }