|
|
@@ -92,6 +92,10 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
/// 错误信息
|
|
|
/// </summary>
|
|
|
public string ErrorMessage { get; private set; }
|
|
|
+
|
|
|
+ //当前的图像采集模式
|
|
|
+ public SciCam.SciCamGrabStrategy CurrentGrabStrategy { get; private set; } = SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_Latest;
|
|
|
+
|
|
|
#endregion
|
|
|
|
|
|
#region 事件
|
|
|
@@ -353,7 +357,7 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
// ch:注册事件回调 | en:Register event callback
|
|
|
//nReVal = mvCameraAcq.RegisterPayloadCallBack(new SciCam.fnOnPayloadDelegate(ImageCallBack), IntPtr.Zero, true);
|
|
|
// ch:设置采集策略 | en:Set Grab Strategy
|
|
|
- nReVal = mvCameraAcq.SetGrabStrategy(SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_OneByOne);
|
|
|
+ nReVal = mvCameraAcq.SetGrabStrategy(CurrentGrabStrategy);
|
|
|
if (nReVal != SciCam.SCI_CAMERA_OK)
|
|
|
{
|
|
|
Console.WriteLine("Register Event CallBack fail! nRet {0}", nReVal);
|
|
|
@@ -407,10 +411,11 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 采集图像
|
|
|
+ /// 采集单张图片
|
|
|
/// </summary>
|
|
|
+ /// <param name="lastImageOnly">true:采集一张新图像,false:返回最后一张图像</param>
|
|
|
/// <returns></returns>
|
|
|
- public ICogImage Grab()
|
|
|
+ public ICogImage Grab(bool lastImageOnly = true)
|
|
|
{
|
|
|
//_operationSemaphore.Wait();
|
|
|
uint nReVal = SciCam.SCI_CAMERA_OK;
|
|
|
@@ -426,6 +431,26 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
{
|
|
|
OpenDevice();
|
|
|
}
|
|
|
+
|
|
|
+ //如果仅仅采集最后一帧,则清空缓存
|
|
|
+ if (lastImageOnly)
|
|
|
+ {
|
|
|
+ //判断当前的模式是否为最新模式,如果不是则设置为最新模式
|
|
|
+ if (CurrentGrabStrategy != SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_OneByOne)
|
|
|
+ {
|
|
|
+ CurrentGrabStrategy = SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_OneByOne;
|
|
|
+ nReVal = mvCameraAcq.SetGrabStrategy(CurrentGrabStrategy);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //判断当前的模式是否为顺序模式,如果不是则设置为顺序模式
|
|
|
+ if (CurrentGrabStrategy != SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_Latest)
|
|
|
+ {
|
|
|
+ CurrentGrabStrategy = SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_Latest;
|
|
|
+ nReVal = mvCameraAcq.SetGrabStrategy(CurrentGrabStrategy);
|
|
|
+ }
|
|
|
+ }
|
|
|
//if (!mvCameraAcq.IsGrabbing())
|
|
|
//{
|
|
|
// mvCameraAcq.StartGrabbing();
|
|
|
@@ -547,15 +572,11 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
if (!mvCameraAcq.IsDeviceOpen())
|
|
|
return false;
|
|
|
uint nReVal = SciCam.SCI_CAMERA_OK;
|
|
|
- for (int i = 0; i < 3; i++)
|
|
|
+ nReVal = mvCameraAcq.SetIntValue("ExposureTime", (int)ExposureTime);
|
|
|
+ if (nReVal != SciCam.SCI_CAMERA_OK)
|
|
|
{
|
|
|
- nReVal = mvCameraAcq.SetIntValue("ExposureTime", (int)ExposureTime);
|
|
|
- if (nReVal != SciCam.SCI_CAMERA_OK)
|
|
|
- {
|
|
|
- mvCameraAcq.SetFloatValue("ExposureTime", ExposureTime);
|
|
|
- }
|
|
|
+ mvCameraAcq.SetFloatValue("ExposureTime", ExposureTime);
|
|
|
}
|
|
|
- mvCameraAcq.ClearPayloadBuffer();
|
|
|
return true;
|
|
|
}
|
|
|
finally
|
|
|
@@ -616,13 +637,10 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
if (!mvCameraAcq.IsDeviceOpen())
|
|
|
return false;
|
|
|
uint nReVal = SciCam.SCI_CAMERA_OK;
|
|
|
- for (int i = 0; i < 3; i++)
|
|
|
+ nReVal = mvCameraAcq.SetIntValue("Gain", (int)Gain);
|
|
|
+ if (nReVal != SciCam.SCI_CAMERA_OK)
|
|
|
{
|
|
|
- nReVal = mvCameraAcq.SetIntValue("Gain", (int)Gain);
|
|
|
- if (nReVal != SciCam.SCI_CAMERA_OK)
|
|
|
- {
|
|
|
- mvCameraAcq.SetFloatValue("Gain", Gain);
|
|
|
- }
|
|
|
+ mvCameraAcq.SetFloatValue("Gain", Gain);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
@@ -676,7 +694,7 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- Grab();
|
|
|
+ Grab(false);
|
|
|
ImageCallbackEvent?.Invoke(Image, TotalTime, ErrorMessage);
|
|
|
}
|
|
|
catch (Exception)
|