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
|
{
|
/// <summary>
|
/// 利用Flycapture库连接的相机
|
/// </summary>
|
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();
|
}
|
|
/// <summary>
|
/// 相机初始化
|
/// </summary>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 打开
|
/// </summary>
|
/// <returns></returns>
|
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 )
|
{
|
}
|
|
}
|
|
/// <summary>
|
/// 关闭
|
/// </summary>
|
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));
|
}
|
}
|
|
/// <summary>
|
/// 开始抓拍
|
/// </summary>
|
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;
|
}
|
|
/// <summary>
|
/// 从摄像机抓取图像
|
///// </summary>
|
/// <returns></returns>
|
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));
|
|
}
|
}
|
|
/// <summary>
|
/// 释放图片数据
|
/// </summary>
|
protected override void FreeImage()
|
{
|
if (null != this.Image)
|
{
|
this.Image.Dispose();
|
this.Image = null;
|
}
|
}
|
|
/// <summary>
|
/// 把抓拍图片转成bitmap图片
|
/// </summary>
|
/// <returns></returns>
|
public override Bitmap GetBitmap()
|
{
|
if (null == this.Image)
|
{
|
return null;
|
}
|
|
return this.Image.bitmap;
|
}
|
}
|
}
|