using HalconDotNet;
using MvCamCtrl.NET;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rs.Cameras
{
///
/// 方向
///
public enum EDir
{
X,
Y
}
public enum ETriggerSource
{
///
/// 硬触发
///
Line0,
///
/// 软触发
///
Software
}
public abstract class BaseCameraInfo
{
public MyCamera Camera { get; set; }
public string CameraName { get; set; }
public int Index { get; set; }
private List Images;
int apiResult = -1;
public BaseCameraInfo()
{
Images = new List();
}
public void Deinit()
{
if (Camera != null)
{
Camera.MV_CC_CloseDevice_NET();
Camera.MV_CC_DestroyDevice_NET();
}
}
///
/// 清除内存中的图片
///
public void ClearImage()
{
lock (this)
{
if (Images != null)
{
Images.Clear();
}
}
}
///
/// 取图
///
///
public int Grab()
{
if (Camera != null)
return Camera.MV_CC_SetCommandValue_NET("TriggerSoftware");
return -1;
}
public int StartGrabbing()
{
if (Camera != null)
return Camera.MV_CC_StartGrabbing_NET();
return -1;
}
public void AddImage(HObject image)
{
lock (this)
{
Images.Add(image);
}
}
///
/// 设置曝光时间
///
///
///
public int SetExposure(float timer)
{
if (Camera != null)
{
apiResult = Camera.MV_CC_SetEnumValue_NET("ExposureAuto", 0);
if (apiResult != 0)
{
return apiResult;
}
apiResult = Camera.MV_CC_SetFloatValue_NET("ExposureTime", timer);
if (apiResult != 0)
{
return apiResult;
}
}
else
{
return -1;
}
return 0;
}
///
/// 设置相机增益
///
///
///
///
public int SetGain(float gain)
{
if (Camera != null)
{
apiResult = Camera.MV_CC_SetEnumValue_NET("GainAuto", 0);
if (apiResult != 0)
{
return apiResult;
}
apiResult = Camera.MV_CC_SetFloatValue_NET("Gain", gain);
if (apiResult != 0)
{
return apiResult;
}
}
else
{
return -1;
}
return 0;
}
///
/// 设置相机的触发模式
///
///
///
///
public int SetTrigger(ETriggerSource triggerSource = ETriggerSource.Line0)
{
if (Camera != null)
{
if (triggerSource == ETriggerSource.Line0)
{
apiResult = Camera.MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0);
if (apiResult != 0)
{
apiResult = Camera.MV_CC_SetEnumValue_NET("TriggerActivation", 0);//设置上升沿触发
if (apiResult != 0)
{
return apiResult;
}
}
else
{
return apiResult;
}
}
else
{
apiResult = Camera.MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE);
if (apiResult != 0)
{
return apiResult;
}
}
}
else
{
return -1;
}
return 0;
}
///
/// 设置相机XY方向是否反转
///
///
///
///
///
public int SetReverse(EDir dir = EDir.X, bool reverse = false)
{
if (Camera != null)
{
if (dir == EDir.X)
{
apiResult = Camera.MV_CC_SetBoolValue_NET("ReverseX", reverse);
if (apiResult != 0)
return apiResult;
}
else
{
apiResult = Camera.MV_CC_SetBoolValue_NET("ReverseY", reverse);
if (apiResult != 0)
return apiResult;
}
}
else
{
return -1;
}
return 0;
}
///
/// 获取最后一张图片
///
///
public HObject GetLastImage()
{
lock (this)
{
if (Images != null && Images.Count > 0)
{
return Images[Images.Count - 1];
}
return null;
}
}
///
/// 获取所有的图片
///
///
public List GetAllImages()
{
lock (this)
{
return Images;
}
}
///
/// 获取图片数量
///
///
public int GetImageCount()
{
lock (this)
{
if (Images != null && Images.Count > 0)
{
return Images.Count;
}
return 0;
}
}
}
}