using Bro.Common.Interface;
|
using Bro.Common.UI;
|
using System.Collections.Generic;
|
using System.Drawing;
|
using System.Windows.Forms;
|
|
namespace Bro.Common.Base.UI
|
{
|
public partial class CtrlCameraRunBase : UserControl, IRunCtrl
|
{
|
public CtrlCameraRunBase()
|
{
|
InitializeComponent();
|
}
|
|
public IDevice Device { get; set; }
|
|
protected CameraBase Camera
|
{
|
get => Device as CameraBase;
|
}
|
|
public CtrlCameraRunBase(IDevice device)
|
{
|
InitializeComponent();
|
Device = device;
|
|
Camera.OnImageUpdated += Camera_UpdateShowImage;
|
Camera.OnElementsUpdated += Camera_OnElementsUpdated;
|
}
|
|
private readonly Dictionary<string, List<ElementBase>> _eleBufferDict = new Dictionary<string, List<ElementBase>>();
|
private volatile string _setId = "";
|
|
protected virtual void Camera_OnElementsUpdated(CameraBase camera, List<ElementBase> eleList, string setId)
|
{
|
if (cvImage.IsHandleCreated)
|
{
|
if (_setId == setId)
|
{
|
eleList.ForEach(e => cvImage.Elements.Add(e));
|
}
|
else
|
{
|
_eleBufferDict[setId] = eleList;
|
}
|
}
|
}
|
|
protected virtual void Camera_UpdateShowImage(CameraBase camera, Bitmap image, string setId)
|
{
|
_setId = setId;
|
|
if (cvImage.IsHandleCreated)
|
{
|
cvImage.LoadImage(image);
|
|
if (_eleBufferDict.ContainsKey(setId))
|
{
|
_eleBufferDict[setId].ForEach(e => cvImage.Elements.Add(e));
|
|
_eleBufferDict.Remove(setId);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 清理所有正在使用的资源。
|
/// </summary>
|
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
protected override void Dispose(bool disposing)
|
{
|
if (disposing && (components != null))
|
{
|
components.Dispose();
|
}
|
base.Dispose(disposing);
|
}
|
}
|
}
|