277 lines
8.2 KiB
C#
277 lines
8.2 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Runtime.InteropServices;
|
||
using XCamera.Models;
|
||
|
||
namespace XCamera
|
||
{
|
||
/// <summary>
|
||
/// XCamera库的主入口点,提供简化的API接口
|
||
/// </summary>
|
||
public class XCamera
|
||
{
|
||
private static XCameraManager _manager;
|
||
private static readonly object _lockObject = new object();
|
||
|
||
/// <summary>
|
||
/// 获取管理器实例(单例模式)
|
||
/// </summary>
|
||
private static XCameraManager Manager
|
||
{
|
||
get
|
||
{
|
||
lock (_lockObject)
|
||
{
|
||
if (_manager == null)
|
||
{
|
||
_manager = new XCameraManager();
|
||
}
|
||
return _manager;
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// LED状态更新事件
|
||
/// </summary>
|
||
public static event EventHandler<LedStatusEventArgs> LedStatusUpdated
|
||
{
|
||
add { Manager.LedStatusUpdated += value; }
|
||
remove { Manager.LedStatusUpdated -= value; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 连接状态变更事件
|
||
/// </summary>
|
||
public static event EventHandler<ConnectionStateEventArgs> ConnectionStateChanged
|
||
{
|
||
add { Manager.ConnectionStateChanged += value; }
|
||
remove { Manager.ConnectionStateChanged -= value; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 捕获状态变更事件
|
||
/// </summary>
|
||
public static event EventHandler<CaptureStateEventArgs> CaptureStateChanged
|
||
{
|
||
add { Manager.CaptureStateChanged += value; }
|
||
remove { Manager.CaptureStateChanged -= value; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 图像捕获事件
|
||
/// </summary>
|
||
public static event EventHandler<ImageCapturedEventArgs> ImageCaptured
|
||
{
|
||
add { Manager.ImageCaptured += value; }
|
||
remove { Manager.ImageCaptured -= value; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 信息事件
|
||
/// </summary>
|
||
public static event EventHandler<InfoEventArgs> InfoOccurred
|
||
{
|
||
add { Manager.InfoOccurred += value; }
|
||
remove { Manager.InfoOccurred -= value; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 错误事件
|
||
/// </summary>
|
||
public static event EventHandler<ErrorEventArgs> ErrorOccurred
|
||
{
|
||
add { Manager.ErrorOccurred += value; }
|
||
remove { Manager.ErrorOccurred -= value; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 是否已初始化
|
||
/// </summary>
|
||
public static bool IsInitialized
|
||
{
|
||
get { return Manager.IsInitialized; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 是否正在捕获图像
|
||
/// </summary>
|
||
public static bool IsCapturing
|
||
{
|
||
get { return Manager.IsCapturing; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 是否已连接
|
||
/// </summary>
|
||
public static bool IsConnected
|
||
{
|
||
get { return Manager.IsConnected; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 1. 初始化
|
||
/// </summary>
|
||
/// <param name="configFilePath">配置文件路径</param>
|
||
/// <returns>是否成功初始化</returns>
|
||
public static bool Initialize(string configFilePath = null)
|
||
{
|
||
return Manager.Initialize(configFilePath);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 2. 设置配置目录路径
|
||
/// </summary>
|
||
/// <param name="configPath">配置目录路径</param>
|
||
/// <returns>是否成功设置</returns>
|
||
public static bool SetConfigPath(string configPath)
|
||
{
|
||
return Manager.SetConfigPath(configPath);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 2.1 设置摄像头IP地址
|
||
/// </summary>
|
||
/// <param name="ipAddress">IP地址</param>
|
||
/// <returns>是否成功设置</returns>
|
||
public static bool SetIP(string ipAddress)
|
||
{
|
||
return Manager.UpdateIpAddress(ipAddress);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 3. 根据配置文件内容启动摄像头
|
||
/// </summary>
|
||
/// <param name="previewHandle">预览窗口句柄(可为IntPtr.Zero)</param>
|
||
/// <returns>是否成功启动</returns>
|
||
public static bool StartCamera(IntPtr previewHandle = default(IntPtr))
|
||
{
|
||
return Manager.StartCamera(previewHandle);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 4. 循环从摄像头捕获图像
|
||
/// </summary>
|
||
/// <param name="intervalMs">捕获间隔(毫秒)</param>
|
||
/// <returns>是否成功开始捕获</returns>
|
||
public static bool StartCapture(int intervalMs = 1000)
|
||
{
|
||
return Manager.StartCapture(intervalMs);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 5. 识别配置文件内的每个区域中(这些区域是led灯),led灯的颜色(红,黄,蓝,绿),亮灭,是否闪烁
|
||
/// </summary>
|
||
/// <returns>LED状态列表</returns>
|
||
public static List<LedStatus> DetectLeds()
|
||
{
|
||
return Manager.DetectLeds();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 6. 提供函数查询灯的状态
|
||
/// </summary>
|
||
/// <returns>LED状态列表</returns>
|
||
public static List<LedStatus> GetLedStatuses()
|
||
{
|
||
return Manager.GetLedStatuses();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取指定ID的LED状态
|
||
/// </summary>
|
||
/// <param name="regionId">区域ID</param>
|
||
/// <returns>LED状态</returns>
|
||
public static LedStatus GetLedStatus(string regionId)
|
||
{
|
||
return Manager.GetLedStatus(regionId);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 7. 提供函数,执行后显示一个窗口。用于设置led区域
|
||
/// </summary>
|
||
public static void ShowRegionEditor()
|
||
{
|
||
Manager.ShowRegionEditor();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 8. 关闭卸载并释放资源
|
||
/// </summary>
|
||
public static void Shutdown()
|
||
{
|
||
lock (_lockObject)
|
||
{
|
||
_manager?.Shutdown();
|
||
_manager?.Dispose();
|
||
_manager = null;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 停止捕获
|
||
/// </summary>
|
||
public static void StopCapture()
|
||
{
|
||
Manager.StopCapture();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 停止摄像头
|
||
/// </summary>
|
||
public static void StopCamera()
|
||
{
|
||
Manager.StopCamera();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新IP地址
|
||
/// </summary>
|
||
/// <param name="ipAddress">新IP地址</param>
|
||
/// <returns>是否成功更新</returns>
|
||
public static bool UpdateIpAddress(string ipAddress)
|
||
{
|
||
return Manager.UpdateIpAddress(ipAddress);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 添加LED区域
|
||
/// </summary>
|
||
/// <param name="region">LED区域</param>
|
||
/// <returns>是否成功添加</returns>
|
||
public static bool AddLedRegion(LedRegion region)
|
||
{
|
||
return Manager.AddLedRegion(region);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除LED区域
|
||
/// </summary>
|
||
/// <param name="regionId">区域ID</param>
|
||
/// <returns>是否成功删除</returns>
|
||
public static bool RemoveLedRegion(string regionId)
|
||
{
|
||
return Manager.RemoveLedRegion(regionId);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 保存配置
|
||
/// </summary>
|
||
/// <param name="filePath">文件路径</param>
|
||
/// <returns>是否成功保存</returns>
|
||
public static bool SaveConfig(string filePath = null)
|
||
{
|
||
return Manager.SaveConfig(filePath);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取当前配置
|
||
/// </summary>
|
||
public static CameraConfig GetCurrentConfig()
|
||
{
|
||
return Manager.CurrentConfig;
|
||
}
|
||
}
|
||
} |