300 lines
8.7 KiB
C#
300 lines
8.7 KiB
C#
using System;
|
||
using System.ComponentModel;
|
||
using System.Drawing.Imaging;
|
||
using AntdUI;
|
||
using OpenCvSharp;
|
||
|
||
namespace DH.Commons.Base
|
||
{
|
||
public class CameraBase : NotifyProperty
|
||
{
|
||
// 私有字段 + 带通知的属性(与DetectionLabel风格一致)
|
||
private bool _isEnabled = false;
|
||
private bool _isContinueMode = false;
|
||
private bool _isSavePicEnabled = false;
|
||
private string _imageSaveDirectory;
|
||
private ImageFormat _imageFormat = ImageFormat.Jpeg;
|
||
private bool _isHardwareTrigger = false;
|
||
private string _serialNumber = string.Empty;
|
||
private string _cameraName = string.Empty;
|
||
private string _cameraIP = string.Empty;
|
||
private string _computerIP = string.Empty;
|
||
private bool _isDirectHardwareTrigger = false;
|
||
private float _gain = -1;
|
||
private float _rotateImage = 0;
|
||
private float _exposure = 200;
|
||
private float _triggerDelay = 0;
|
||
private decimal _roiX = 0;
|
||
private decimal _roiY = 0;
|
||
private decimal _roiW = 0;
|
||
private decimal _roiH = 0;
|
||
private int _lineDebouncerTime = 0;
|
||
|
||
public volatile int SnapshotCount = 0;
|
||
|
||
[Category("采图模式")]
|
||
[DisplayName("连续模式")]
|
||
[Description("是否连续模式。true:连续模式采图;false:触发模式采图")]
|
||
public bool IsContinueMode
|
||
{
|
||
get => _isContinueMode;
|
||
set
|
||
{
|
||
if (_isContinueMode == value) return;
|
||
_isContinueMode = value;
|
||
OnPropertyChanged(nameof(IsContinueMode));
|
||
}
|
||
}
|
||
|
||
public virtual bool IsEnabled
|
||
{
|
||
get => _isEnabled;
|
||
set
|
||
{
|
||
if (_isEnabled == value) return;
|
||
_isEnabled = value;
|
||
OnPropertyChanged(nameof(IsEnabled));
|
||
}
|
||
}
|
||
|
||
public virtual bool IsSavePicEnabled
|
||
{
|
||
get => _isSavePicEnabled;
|
||
set
|
||
{
|
||
if (_isSavePicEnabled == value) return;
|
||
_isSavePicEnabled = value;
|
||
OnPropertyChanged(nameof(IsSavePicEnabled));
|
||
}
|
||
}
|
||
|
||
[Category("图片保存")]
|
||
[DisplayName("图片保存文件夹")]
|
||
[Description("图片保存文件夹")]
|
||
public virtual string ImageSaveDirectory
|
||
{
|
||
get => _imageSaveDirectory;
|
||
set
|
||
{
|
||
if (_imageSaveDirectory == value) return;
|
||
_imageSaveDirectory = value;
|
||
OnPropertyChanged(nameof(ImageSaveDirectory));
|
||
}
|
||
}
|
||
|
||
[Category("图片保存")]
|
||
[DisplayName("图片保存格式")]
|
||
[Description("图片保存格式")]
|
||
public ImageFormat ImageFormat
|
||
{
|
||
get => _imageFormat;
|
||
set
|
||
{
|
||
if (_imageFormat == value) return;
|
||
_imageFormat = value;
|
||
OnPropertyChanged(nameof(ImageFormat));
|
||
}
|
||
}
|
||
|
||
[Category("采图模式")]
|
||
[DisplayName("硬触发")]
|
||
[Description("是否硬触发模式。true:硬触发;false:软触发")]
|
||
public bool IsHardwareTrigger
|
||
{
|
||
get => _isHardwareTrigger;
|
||
set
|
||
{
|
||
if (_isHardwareTrigger == value) return;
|
||
_isHardwareTrigger = value;
|
||
OnPropertyChanged(nameof(IsHardwareTrigger));
|
||
}
|
||
}
|
||
|
||
public string SerialNumber
|
||
{
|
||
get => _serialNumber;
|
||
set
|
||
{
|
||
if (_serialNumber == value) return;
|
||
_serialNumber = value;
|
||
OnPropertyChanged(nameof(SerialNumber));
|
||
}
|
||
}
|
||
|
||
public string CameraName
|
||
{
|
||
get => _cameraName;
|
||
set
|
||
{
|
||
if (_cameraName == value) return;
|
||
_cameraName = value;
|
||
OnPropertyChanged(nameof(CameraName));
|
||
}
|
||
}
|
||
|
||
public string CameraIP
|
||
{
|
||
get => _cameraIP;
|
||
set
|
||
{
|
||
if (_cameraIP == value) return;
|
||
_cameraIP = value;
|
||
OnPropertyChanged(nameof(CameraIP));
|
||
}
|
||
}
|
||
|
||
public string ComputerIP
|
||
{
|
||
get => _computerIP;
|
||
set
|
||
{
|
||
if (_computerIP == value) return;
|
||
_computerIP = value;
|
||
OnPropertyChanged(nameof(ComputerIP));
|
||
}
|
||
}
|
||
|
||
[Category("采图模式")]
|
||
[DisplayName("是否传感器直接硬触发")]
|
||
[Description("是否传感器直接硬触发。true:传感器硬触发,不通过软件触发;false:通过软件触发IO 的硬触发模式")]
|
||
public bool IsDirectHardwareTrigger
|
||
{
|
||
get => _isDirectHardwareTrigger;
|
||
set
|
||
{
|
||
if (_isDirectHardwareTrigger == value) return;
|
||
_isDirectHardwareTrigger = value;
|
||
OnPropertyChanged(nameof(IsDirectHardwareTrigger));
|
||
}
|
||
}
|
||
|
||
[Category("相机设置")]
|
||
[DisplayName("增益")]
|
||
[Description("Gain:增益,-1:不设置,不同型号相机的增益,请参考mvs")]
|
||
public float Gain
|
||
{
|
||
get => _gain;
|
||
set
|
||
{
|
||
if (_gain.Equals(value)) return;
|
||
_gain = value;
|
||
OnPropertyChanged(nameof(Gain));
|
||
}
|
||
}
|
||
|
||
[Category("图像旋转")]
|
||
[DisplayName("默认旋转")]
|
||
[Description("默认旋转,相机开启后默认不旋转")]
|
||
public virtual float RotateImage
|
||
{
|
||
get => _rotateImage;
|
||
set
|
||
{
|
||
if (_rotateImage.Equals(value)) return;
|
||
_rotateImage = value;
|
||
OnPropertyChanged(nameof(RotateImage));
|
||
}
|
||
}
|
||
|
||
[Category("取像配置")]
|
||
[DisplayName("曝光")]
|
||
[Description("曝光")]
|
||
public virtual float Exposure
|
||
{
|
||
get => _exposure;
|
||
set
|
||
{
|
||
if (_exposure.Equals(value)) return;
|
||
_exposure = value;
|
||
OnPropertyChanged(nameof(Exposure));
|
||
}
|
||
}
|
||
|
||
[Category("相机设置")]
|
||
[DisplayName("硬触发后的延迟")]
|
||
[Description("TriggerDelay:硬触发后的延迟,单位:us 微秒")]
|
||
public float TriggerDelay
|
||
{
|
||
get => _triggerDelay;
|
||
set
|
||
{
|
||
if (_triggerDelay.Equals(value)) return;
|
||
_triggerDelay = value;
|
||
OnPropertyChanged(nameof(TriggerDelay));
|
||
}
|
||
}
|
||
|
||
public decimal ROIX
|
||
{
|
||
get => _roiX;
|
||
set
|
||
{
|
||
if (_roiX == value) return;
|
||
_roiX = value;
|
||
OnPropertyChanged(nameof(ROIX));
|
||
}
|
||
}
|
||
|
||
public decimal ROIY
|
||
{
|
||
get => _roiY;
|
||
set
|
||
{
|
||
if (_roiY == value) return;
|
||
_roiY = value;
|
||
OnPropertyChanged(nameof(ROIY));
|
||
}
|
||
}
|
||
|
||
public decimal ROIW
|
||
{
|
||
get => _roiW;
|
||
set
|
||
{
|
||
if (_roiW == value) return;
|
||
_roiW = value;
|
||
OnPropertyChanged(nameof(ROIW));
|
||
}
|
||
}
|
||
|
||
public decimal ROIH
|
||
{
|
||
get => _roiH;
|
||
set
|
||
{
|
||
if (_roiH == value) return;
|
||
_roiH = value;
|
||
OnPropertyChanged(nameof(ROIH));
|
||
}
|
||
}
|
||
|
||
[Category("相机设置")]
|
||
[DisplayName("滤波时间")]
|
||
[Description("LineDebouncerTime:I/O去抖时间 单位:us")]
|
||
public int LineDebouncerTime
|
||
{
|
||
get => _lineDebouncerTime;
|
||
set
|
||
{
|
||
if (_lineDebouncerTime == value) return;
|
||
_lineDebouncerTime = value;
|
||
OnPropertyChanged(nameof(LineDebouncerTime));
|
||
}
|
||
}
|
||
|
||
// 其他方法保持原有逻辑
|
||
public Action<DateTime, CameraBase, Mat> OnHImageOutput { get; set; }
|
||
|
||
public virtual bool CameraConnect() { return false; }
|
||
|
||
public virtual bool CameraDisConnect() { return false; }
|
||
|
||
public virtual void SetExposure(int exposureTime, string cameraName) { }
|
||
|
||
public virtual void SetGain(int gain, string cameraName) { }
|
||
|
||
internal virtual void SetAcquisitionMode(int mode) { }
|
||
|
||
internal virtual void SetAcqRegion(int offsetV, int offsetH, int imageH, int imageW, string cameraName) { }
|
||
}
|
||
} |