using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using ErrorEventArgs = XCamera.Models.ErrorEventArgs;
using InfoEventArgs = XCamera.Models.InfoEventArgs;
using XCamera.Models;
namespace Test
{
public partial class Form1 : Form
{
private bool _isInitialized = false;
private bool _isConnected = false;
private bool _isCapturing = false;
private string _cameraIpAddress = "192.168.100.10"; // 默认IP地址
public Form1()
{
InitializeComponent();
// 检查是否处于设计模式
if (!DesignMode)
{
InitializeEvents();
}
UpdateUI();
}
///
/// 初始化事件处理
///
private void InitializeEvents()
{
// 避免在设计模式下订阅事件
if (DesignMode)
return;
// 订阅XCamera事件
global::XCamera.XCamera.LedStatusUpdated += OnLedStatusUpdated;
global::XCamera.XCamera.ConnectionStateChanged += OnConnectionStateChanged;
global::XCamera.XCamera.CaptureStateChanged += OnCaptureStateChanged;
global::XCamera.XCamera.ErrorOccurred += OnErrorOccurred;
global::XCamera.XCamera.InfoOccurred += OnInfoOccurred;
global::XCamera.XCamera.ImageCaptured += OnImageCaptured;
}
///
/// 1. 初始化
///
private void btnInitialize_Click(object sender, EventArgs e)
{
try
{
LogMessage("正在初始化SDK...");
// 初始化SDK(不加载配置文件)
if (global::XCamera.XCamera.Initialize())
{
_isInitialized = true;
LogMessage("SDK初始化成功!");
LogMessage("现在可以设置配置文件或启动摄像头");
}
else
{
LogMessage("SDK初始化失败!");
}
}
catch (Exception ex)
{
LogMessage($"初始化错误: {ex.Message}");
}
UpdateUI();
}
///
/// 2. 设置配置文件路径
///
private void btnSetConfigFile_Click(object sender, EventArgs e)
{
try
{
using (FolderBrowserDialog folderDialog = new FolderBrowserDialog())
{
// 设置默认路径为程序目录下的config文件夹
string defaultConfigPath = Path.Combine(Application.StartupPath, "config");
if (Directory.Exists(defaultConfigPath))
{
folderDialog.SelectedPath = defaultConfigPath;
}
else
{
folderDialog.SelectedPath = Application.StartupPath;
}
folderDialog.Description = "选择配置目录";
folderDialog.ShowNewFolderButton = false;
if (folderDialog.ShowDialog() == DialogResult.OK)
{
LogMessage($"正在设置配置目录: {folderDialog.SelectedPath}");
if (global::XCamera.XCamera.SetConfigPath(folderDialog.SelectedPath))
{
LogMessage("配置目录设置成功!");
// 显示配置信息
var config = global::XCamera.XCamera.GetCurrentConfig();
if (config != null)
{
LogMessage($"LED区域数: {config.LedRegions.Count}");
LogMessage($"TCP端口: {config.TcpPort}");
LogMessage($"用户名: {config.Username}");
LogMessage($"通道: {config.Channel}");
}
}
else
{
LogMessage("配置目录设置失败!");
}
}
}
}
catch (Exception ex)
{
LogMessage($"配置目录设置错误: {ex.Message}");
}
}
///
/// 3. 设置IP地址
///
private void btnSetIP_Click(object sender, EventArgs e)
{
try
{
if (!_isInitialized)
{
LogMessage("请先初始化!");
return;
}
string ipAddress = txtIpAddress.Text.Trim();
if (string.IsNullOrEmpty(ipAddress))
{
LogMessage("IP地址不能为空!");
return;
}
if (global::XCamera.XCamera.SetIP(ipAddress))
{
_cameraIpAddress = ipAddress;
LogMessage($"IP地址设置成功: {ipAddress}");
}
else
{
LogMessage($"IP地址设置失败: {ipAddress}");
}
}
catch (Exception ex)
{
LogMessage($"设置IP地址错误: {ex.Message}");
}
}
///
/// 5. 启动摄像头
///
private void btnStartCamera_Click(object sender, EventArgs e)
{
try
{
if (!_isInitialized)
{
LogMessage("请先初始化!");
return;
}
LogMessage("正在启动摄像头...");
// 使用camera控件的窗口句柄进行预览
if (global::XCamera.XCamera.StartCamera(camera.Handle))
{
LogMessage("摄像头启动成功!");
}
else
{
LogMessage("摄像头启动失败!");
}
}
catch (Exception ex)
{
LogMessage($"启动摄像头错误: {ex.Message}");
}
UpdateUI();
}
///
/// 6. 开始捕获图像
///
private void btnStartCapture_Click(object sender, EventArgs e)
{
try
{
if (!_isConnected)
{
LogMessage("请先连接摄像头!");
return;
}
if (_isCapturing)
{
LogMessage("已经在捕获中!");
return;
}
LogMessage("正在开始捕获图像...");
if (global::XCamera.XCamera.StartCapture(1000)) // 1秒间隔
{
LogMessage("开始捕获图像成功!");
}
else
{
LogMessage("开始捕获图像失败!");
}
}
catch (Exception ex)
{
LogMessage($"开始捕获错误: {ex.Message}");
}
UpdateUI();
}
///
/// 7. LED灯识别
///
private void btnDetectLeds_Click(object sender, EventArgs e)
{
try
{
if (!_isConnected)
{
LogMessage("请先连接摄像头!");
return;
}
LogMessage("正在识别LED灯...");
var statuses = global::XCamera.XCamera.DetectLeds();
LogMessage($"检测到 {statuses.Count} 个LED灯:");
foreach (var status in statuses)
{
LogMessage($" {status.GetStatusDescription()}");
}
// 显示图像(如果有的话)
DisplayLedImage(statuses);
}
catch (Exception ex)
{
LogMessage($"LED识别错误: {ex.Message}");
}
}
///
/// 8. 状态查询
///
private void btnGetLedStatuses_Click(object sender, EventArgs e)
{
try
{
if (!_isConnected)
{
LogMessage("请先连接摄像头!");
return;
}
LogMessage("正在查询LED状态...");
var statuses = global::XCamera.XCamera.GetLedStatuses();
LogMessage($"当前LED状态 ({statuses.Count} 个):");
foreach (var status in statuses)
{
LogMessage($" {status.GetStatusDescription()}");
}
// 显示图像
DisplayLedImage(statuses);
}
catch (Exception ex)
{
LogMessage($"状态查询错误: {ex.Message}");
}
}
///
/// 9. 区域编辑器
///
private void btnShowRegionEditor_Click(object sender, EventArgs e)
{
try
{
LogMessage("正在打开区域编辑器...");
global::XCamera.XCamera.ShowRegionEditor();
LogMessage("区域编辑器已关闭");
}
catch (Exception ex)
{
LogMessage($"区域编辑器错误: {ex.Message}");
}
}
///
/// 9. 关闭
///
private void btnShutdown_Click(object sender, EventArgs e)
{
try
{
LogMessage("正在关闭...");
// 停止捕获
if (_isCapturing)
{
global::XCamera.XCamera.StopCapture();
LogMessage("捕获已停止");
}
// 停止摄像头
if (_isConnected)
{
global::XCamera.XCamera.StopCamera();
LogMessage("摄像头已停止");
}
// 关闭SDK
if (_isInitialized)
{
global::XCamera.XCamera.Shutdown();
LogMessage("SDK已关闭");
}
LogMessage("关闭完成!");
}
catch (Exception ex)
{
LogMessage($"关闭错误: {ex.Message}");
}
// 重置状态
_isInitialized = false;
_isConnected = false;
_isCapturing = false;
UpdateUI();
}
///
/// 停止捕获
///
private void btnStopCapture_Click(object sender, EventArgs e)
{
try
{
if (!_isCapturing)
{
LogMessage("当前未在捕获状态!");
return;
}
LogMessage("正在停止捕获...");
global::XCamera.XCamera.StopCapture();
LogMessage("停止捕获成功!");
}
catch (Exception ex)
{
LogMessage($"停止捕获错误: {ex.Message}");
}
UpdateUI();
}
///
/// 停止摄像头
///
private void btnStopCamera_Click(object sender, EventArgs e)
{
try
{
if (!_isConnected)
{
LogMessage("当前未连接摄像头!");
return;
}
LogMessage("正在停止摄像头...");
global::XCamera.XCamera.StopCamera();
LogMessage("停止摄像头成功!");
}
catch (Exception ex)
{
LogMessage($"停止摄像头错误: {ex.Message}");
}
UpdateUI();
}
///
/// LED状态更新事件处理
///
private void OnLedStatusUpdated(object sender, LedStatusEventArgs e)
{
if (InvokeRequired)
{
BeginInvoke(new Action