Files
JoyD/Windows/CS/Framework4.0/XCamera/XCamera/src/XCamera.cs
2026-03-18 08:58:39 +08:00

277 lines
8.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}