Led区编辑
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Timers;
|
using System.Timers;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
@@ -25,9 +27,9 @@ namespace Camera
|
|||||||
|
|
||||||
// 配置数据
|
// 配置数据
|
||||||
private Rectangle _detectionZone;
|
private Rectangle _detectionZone;
|
||||||
private Rectangle _ledZone;
|
private ConcurrentDictionary<int, Rectangle> _ledZones = new ConcurrentDictionary<int, Rectangle>();
|
||||||
|
private ConcurrentDictionary<int, Color> _ledZoneColors = new ConcurrentDictionary<int, Color>();
|
||||||
private Color _detectionZoneColor = Color.Black;
|
private Color _detectionZoneColor = Color.Black;
|
||||||
private Color _ledZoneColor = Color.Lime;
|
|
||||||
|
|
||||||
// 定时器
|
// 定时器
|
||||||
private System.Timers.Timer _timer;
|
private System.Timers.Timer _timer;
|
||||||
@@ -135,11 +137,61 @@ namespace Camera
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取Led区域
|
/// 获取Led区域列表
|
||||||
|
/// </summary>
|
||||||
|
public ConcurrentDictionary<int, Rectangle> GetLedZones()
|
||||||
|
{
|
||||||
|
return _ledZones;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取指定索引的Led区域
|
||||||
|
/// </summary>
|
||||||
|
public Rectangle GetLedZone(int index)
|
||||||
|
{
|
||||||
|
if (_ledZones.ContainsKey(index))
|
||||||
|
return _ledZones[index];
|
||||||
|
return new Rectangle(0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取默认Led区域(索引为1)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Rectangle GetLedZone()
|
public Rectangle GetLedZone()
|
||||||
{
|
{
|
||||||
return _ledZone;
|
if (_ledZones.ContainsKey(1))
|
||||||
|
return _ledZones[1];
|
||||||
|
return new Rectangle(0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置默认Led区域(索引为1)
|
||||||
|
/// </summary>
|
||||||
|
public void SetLedZone(Rectangle zone)
|
||||||
|
{
|
||||||
|
_ledZones[1] = zone;
|
||||||
|
if (!_ledZoneColors.ContainsKey(1))
|
||||||
|
{
|
||||||
|
_ledZoneColors[1] = Color.Lime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取默认Led区域颜色(索引为1)
|
||||||
|
/// </summary>
|
||||||
|
public Color GetLedZoneColor()
|
||||||
|
{
|
||||||
|
if (_ledZoneColors.ContainsKey(1))
|
||||||
|
return _ledZoneColors[1];
|
||||||
|
return Color.Lime;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置默认Led区域颜色(索引为1)
|
||||||
|
/// </summary>
|
||||||
|
public void SetLedZoneColor(Color color)
|
||||||
|
{
|
||||||
|
_ledZoneColors[1] = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -151,11 +203,53 @@ namespace Camera
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 设置Led区域
|
/// 添加Led区域
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SetLedZone(Rectangle zone)
|
public void AddLedZone(int index, Rectangle zone, Color color)
|
||||||
{
|
{
|
||||||
_ledZone = zone;
|
_ledZones[index] = zone;
|
||||||
|
_ledZoneColors[index] = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置指定索引的Led区域
|
||||||
|
/// </summary>
|
||||||
|
public void SetLedZone(int index, Rectangle zone)
|
||||||
|
{
|
||||||
|
if (_ledZones.ContainsKey(index))
|
||||||
|
{
|
||||||
|
_ledZones[index] = zone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 移除Led区域
|
||||||
|
/// </summary>
|
||||||
|
public void RemoveLedZone(int index)
|
||||||
|
{
|
||||||
|
Rectangle r;
|
||||||
|
Color c;
|
||||||
|
_ledZones.TryRemove(index, out r);
|
||||||
|
_ledZoneColors.TryRemove(index, out c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置指定索引的Led区域颜色
|
||||||
|
/// </summary>
|
||||||
|
public void SetLedZoneColor(int index, Color color)
|
||||||
|
{
|
||||||
|
if (_ledZoneColors.ContainsKey(index))
|
||||||
|
{
|
||||||
|
_ledZoneColors[index] = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取Led区域数量
|
||||||
|
/// </summary>
|
||||||
|
public int GetLedZoneCount()
|
||||||
|
{
|
||||||
|
return _ledZones.Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Color GetDetectionZoneColor()
|
public Color GetDetectionZoneColor()
|
||||||
@@ -163,19 +257,24 @@ namespace Camera
|
|||||||
return _detectionZoneColor;
|
return _detectionZoneColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ConcurrentDictionary<int, Color> GetLedZoneColors()
|
||||||
|
{
|
||||||
|
return _ledZoneColors;
|
||||||
|
}
|
||||||
|
|
||||||
public void SetDetectionZoneColor(Color color)
|
public void SetDetectionZoneColor(Color color)
|
||||||
{
|
{
|
||||||
_detectionZoneColor = color;
|
_detectionZoneColor = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Color GetLedZoneColor()
|
/// <summary>
|
||||||
|
/// 获取指定索引的Led区域颜色
|
||||||
|
/// </summary>
|
||||||
|
public Color GetLedZoneColor(int index)
|
||||||
{
|
{
|
||||||
return _ledZoneColor;
|
if (_ledZoneColors.ContainsKey(index))
|
||||||
}
|
return _ledZoneColors[index];
|
||||||
|
return Color.Lime;
|
||||||
public void SetLedZoneColor(Color color)
|
|
||||||
{
|
|
||||||
_ledZoneColor = color;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -202,10 +301,13 @@ namespace Camera
|
|||||||
|
|
||||||
writer.WriteLine("索引,X坐标,Y坐标,宽度,高度,颜色");
|
writer.WriteLine("索引,X坐标,Y坐标,宽度,高度,颜色");
|
||||||
|
|
||||||
if (_ledZone.Width > 0 && _ledZone.Height > 0)
|
foreach (var kvp in _ledZones)
|
||||||
{
|
{
|
||||||
string colorStr = ColorTranslator.ToHtml(_ledZoneColor);
|
int index = kvp.Key;
|
||||||
writer.WriteLine(string.Format("1,{0},{1},{2},{3},{4}", _ledZone.X, _ledZone.Y, _ledZone.Width, _ledZone.Height, colorStr));
|
Rectangle ledZone = kvp.Value;
|
||||||
|
Color ledColor = _ledZoneColors[index];
|
||||||
|
string colorStr = ColorTranslator.ToHtml(ledColor);
|
||||||
|
writer.WriteLine(string.Format("{0},{1},{2},{3},{4},{5}", index, ledZone.X, ledZone.Y, ledZone.Width, ledZone.Height, colorStr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -220,9 +322,9 @@ namespace Camera
|
|||||||
if (string.IsNullOrEmpty(_configPath)) return;
|
if (string.IsNullOrEmpty(_configPath)) return;
|
||||||
|
|
||||||
_detectionZone = new Rectangle(0, 0, 2880, 1620);
|
_detectionZone = new Rectangle(0, 0, 2880, 1620);
|
||||||
_ledZone = new Rectangle(0, 0, 0, 0);
|
_ledZones.Clear();
|
||||||
|
_ledZoneColors.Clear();
|
||||||
_detectionZoneColor = Color.Black;
|
_detectionZoneColor = Color.Black;
|
||||||
_ledZoneColor = Color.Lime;
|
|
||||||
|
|
||||||
string configFile = Path.Combine(_configPath, "Camera.csv");
|
string configFile = Path.Combine(_configPath, "Camera.csv");
|
||||||
try
|
try
|
||||||
@@ -263,17 +365,19 @@ namespace Camera
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!int.TryParse(parts[0], out int index)) continue;
|
if (!int.TryParse(parts[0], out int index)) continue;
|
||||||
if (index == 1 && parts.Length >= 5)
|
if (parts.Length >= 6)
|
||||||
{
|
{
|
||||||
if (!int.TryParse(parts[1], out int x)) continue;
|
if (!int.TryParse(parts[1], out int x)) continue;
|
||||||
if (!int.TryParse(parts[2], out int y)) continue;
|
if (!int.TryParse(parts[2], out int y)) continue;
|
||||||
if (!int.TryParse(parts[3], out int width)) continue;
|
if (!int.TryParse(parts[3], out int width)) continue;
|
||||||
if (!int.TryParse(parts[4], out int height)) continue;
|
if (!int.TryParse(parts[4], out int height)) continue;
|
||||||
_ledZone = new Rectangle(x, y, width, height);
|
Color zoneColor = Color.Lime;
|
||||||
if (parts.Length >= 6 && !string.IsNullOrEmpty(parts[5]))
|
if (parts.Length >= 6 && !string.IsNullOrEmpty(parts[5]))
|
||||||
{
|
{
|
||||||
try { _ledZoneColor = ColorTranslator.FromHtml(parts[5]); } catch { }
|
try { zoneColor = ColorTranslator.FromHtml(parts[5]); } catch { }
|
||||||
}
|
}
|
||||||
|
_ledZones[index] = new Rectangle(x, y, width, height);
|
||||||
|
_ledZoneColors[index] = zoneColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ namespace Camera
|
|||||||
this.dataGridView1 = new System.Windows.Forms.DataGridView();
|
this.dataGridView1 = new System.Windows.Forms.DataGridView();
|
||||||
this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
|
this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
|
||||||
this.toolStripButton3 = new System.Windows.Forms.ToolStripButton();
|
this.toolStripButton3 = new System.Windows.Forms.ToolStripButton();
|
||||||
|
this.toolStripButton4 = new System.Windows.Forms.ToolStripButton();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
||||||
this.splitContainer1.Panel1.SuspendLayout();
|
this.splitContainer1.Panel1.SuspendLayout();
|
||||||
this.splitContainer1.Panel2.SuspendLayout();
|
this.splitContainer1.Panel2.SuspendLayout();
|
||||||
@@ -99,7 +100,8 @@ namespace Camera
|
|||||||
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.toolStripButton1,
|
this.toolStripButton1,
|
||||||
this.toolStripButton2,
|
this.toolStripButton2,
|
||||||
this.toolStripButton3});
|
this.toolStripButton3,
|
||||||
|
this.toolStripButton4});
|
||||||
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
|
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
|
||||||
this.toolStrip1.Name = "toolStrip1";
|
this.toolStrip1.Name = "toolStrip1";
|
||||||
this.toolStrip1.Size = new System.Drawing.Size(80, 40);
|
this.toolStrip1.Size = new System.Drawing.Size(80, 40);
|
||||||
@@ -133,6 +135,15 @@ namespace Camera
|
|||||||
this.toolStripButton3.Visible = false;
|
this.toolStripButton3.Visible = false;
|
||||||
this.toolStripButton3.Click += new System.EventHandler(this.ToolStripButton3_Click);
|
this.toolStripButton3.Click += new System.EventHandler(this.ToolStripButton3_Click);
|
||||||
//
|
//
|
||||||
|
// toolStripButton4
|
||||||
|
//
|
||||||
|
this.toolStripButton4.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||||
|
this.toolStripButton4.Name = "toolStripButton4";
|
||||||
|
this.toolStripButton4.Size = new System.Drawing.Size(36, 36);
|
||||||
|
this.toolStripButton4.ToolTipText = "删除Led区";
|
||||||
|
this.toolStripButton4.Visible = false;
|
||||||
|
this.toolStripButton4.Click += new System.EventHandler(this.ToolStripButton4_Click);
|
||||||
|
//
|
||||||
// dataGridView1
|
// dataGridView1
|
||||||
//
|
//
|
||||||
this.dataGridView1.AllowUserToAddRows = false;
|
this.dataGridView1.AllowUserToAddRows = false;
|
||||||
@@ -187,6 +198,7 @@ namespace Camera
|
|||||||
private System.Windows.Forms.ToolStripButton toolStripButton1;
|
private System.Windows.Forms.ToolStripButton toolStripButton1;
|
||||||
private System.Windows.Forms.ToolStripButton toolStripButton2;
|
private System.Windows.Forms.ToolStripButton toolStripButton2;
|
||||||
private System.Windows.Forms.ToolStripButton toolStripButton3;
|
private System.Windows.Forms.ToolStripButton toolStripButton3;
|
||||||
|
private System.Windows.Forms.ToolStripButton toolStripButton4;
|
||||||
private System.Windows.Forms.DataGridView dataGridView1;
|
private System.Windows.Forms.DataGridView dataGridView1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
@@ -18,15 +19,17 @@ namespace Camera
|
|||||||
private bool _isMoving = false;
|
private bool _isMoving = false;
|
||||||
private bool _isResizing = false;
|
private bool _isResizing = false;
|
||||||
private Point _startPoint;
|
private Point _startPoint;
|
||||||
|
private Point _currentMousePoint;
|
||||||
private Rectangle _originalZone;
|
private Rectangle _originalZone;
|
||||||
private Rectangle _tempZone;
|
|
||||||
private bool _isEditingDetectionZone = false;
|
private bool _isEditingDetectionZone = false;
|
||||||
private bool _isEditingLedZone = false;
|
private bool _isEditingLedZone = false;
|
||||||
|
private int _ledZoneState = 0;
|
||||||
private Color _detectionZoneColor = Color.Black;
|
private Color _detectionZoneColor = Color.Black;
|
||||||
private Color _ledZoneColor = Color.Lime;
|
private ConcurrentDictionary<int, Color> _ledZoneColors = new ConcurrentDictionary<int, Color>();
|
||||||
private Point _resizeStartPoint;
|
private Point _resizeStartPoint;
|
||||||
private Rectangle _originalResizeRect;
|
private Rectangle _originalResizeRect;
|
||||||
private int _hoveredHandle = -1;
|
private int _hoveredHandle = -1;
|
||||||
|
private int _currentLedIndex = -1;
|
||||||
private int[] _handleOffsetsX = { 0, 1, 2, 2, 2, 1, 0, 0 };
|
private int[] _handleOffsetsX = { 0, 1, 2, 2, 2, 1, 0, 0 };
|
||||||
private int[] _handleOffsetsY = { 0, 0, 0, 1, 2, 2, 2, 1 };
|
private int[] _handleOffsetsY = { 0, 0, 0, 1, 2, 2, 2, 1 };
|
||||||
|
|
||||||
@@ -94,7 +97,7 @@ namespace Camera
|
|||||||
{
|
{
|
||||||
_camera.ImageCaptured += Camera_ImageCaptured;
|
_camera.ImageCaptured += Camera_ImageCaptured;
|
||||||
_detectionZoneColor = _camera.GetDetectionZoneColor();
|
_detectionZoneColor = _camera.GetDetectionZoneColor();
|
||||||
_ledZoneColor = _camera.GetLedZoneColor();
|
_ledZoneColors = _camera.GetLedZoneColors();
|
||||||
}
|
}
|
||||||
picBoxCamera.BackColor = Color.Gray;
|
picBoxCamera.BackColor = Color.Gray;
|
||||||
splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
|
splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
|
||||||
@@ -182,6 +185,21 @@ namespace Camera
|
|||||||
}
|
}
|
||||||
toolStripButton2.Image = ledIcon;
|
toolStripButton2.Image = ledIcon;
|
||||||
toolStripButton2.ImageTransparentColor = Color.Transparent;
|
toolStripButton2.ImageTransparentColor = Color.Transparent;
|
||||||
|
|
||||||
|
Bitmap deleteIcon = new Bitmap(32, 32);
|
||||||
|
using (Graphics g = Graphics.FromImage(deleteIcon))
|
||||||
|
{
|
||||||
|
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
|
||||||
|
g.Clear(Color.Transparent);
|
||||||
|
|
||||||
|
using (Pen pen = new Pen(Color.Red, 3))
|
||||||
|
{
|
||||||
|
g.DrawLine(pen, 8, 8, 24, 24);
|
||||||
|
g.DrawLine(pen, 24, 8, 8, 24);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
toolStripButton4.Image = deleteIcon;
|
||||||
|
toolStripButton4.ImageTransparentColor = Color.Transparent;
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
}
|
}
|
||||||
@@ -222,17 +240,17 @@ namespace Camera
|
|||||||
|
|
||||||
if (_camera != null)
|
if (_camera != null)
|
||||||
{
|
{
|
||||||
Rectangle detectionZone = _camera.GetDetectionZone();
|
var ledZones = _camera.GetLedZones();
|
||||||
Rectangle ledZone = _camera.GetLedZone();
|
foreach (var kvp in ledZones)
|
||||||
|
|
||||||
if (detectionZone.Width > 0 && detectionZone.Height > 0)
|
|
||||||
{
|
{
|
||||||
dataGridView1.Rows.Add(0, detectionZone.X, detectionZone.Y, detectionZone.Width, detectionZone.Height, "#FF0000");
|
int index = kvp.Key;
|
||||||
}
|
Rectangle ledZone = kvp.Value;
|
||||||
|
Color ledColor = _camera.GetLedZoneColor(index);
|
||||||
|
|
||||||
if (ledZone.Width > 0 && ledZone.Height > 0)
|
if (ledZone.Width > 0 && ledZone.Height > 0)
|
||||||
{
|
{
|
||||||
dataGridView1.Rows.Add(1, ledZone.X, ledZone.Y, ledZone.Width, ledZone.Height, "#00FF00");
|
dataGridView1.Rows.Add(index, ledZone.X, ledZone.Y, ledZone.Width, ledZone.Height, ColorTranslator.ToHtml(ledColor));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -281,7 +299,6 @@ namespace Camera
|
|||||||
float scaleY = (float)picBoxCamera.ClientSize.Height / imageHeight;
|
float scaleY = (float)picBoxCamera.ClientSize.Height / imageHeight;
|
||||||
|
|
||||||
Rectangle detectionZone = _camera != null ? _camera.GetDetectionZone() : new Rectangle(0, 0, 0, 0);
|
Rectangle detectionZone = _camera != null ? _camera.GetDetectionZone() : new Rectangle(0, 0, 0, 0);
|
||||||
Rectangle ledZone = _camera != null ? _camera.GetLedZone() : new Rectangle(0, 0, 0, 0);
|
|
||||||
|
|
||||||
Rectangle scaledDetectionZone = new Rectangle(
|
Rectangle scaledDetectionZone = new Rectangle(
|
||||||
(int)(detectionZone.X * scaleX),
|
(int)(detectionZone.X * scaleX),
|
||||||
@@ -290,13 +307,6 @@ namespace Camera
|
|||||||
(int)(detectionZone.Height * scaleY)
|
(int)(detectionZone.Height * scaleY)
|
||||||
);
|
);
|
||||||
|
|
||||||
Rectangle scaledLedZone = new Rectangle(
|
|
||||||
(int)(ledZone.X * scaleX),
|
|
||||||
(int)(ledZone.Y * scaleY),
|
|
||||||
(int)(ledZone.Width * scaleX),
|
|
||||||
(int)(ledZone.Height * scaleY)
|
|
||||||
);
|
|
||||||
|
|
||||||
Rectangle currentEditZone = new Rectangle(0, 0, 0, 0);
|
Rectangle currentEditZone = new Rectangle(0, 0, 0, 0);
|
||||||
bool isEditing = false;
|
bool isEditing = false;
|
||||||
Color editColor = _detectionZoneColor;
|
Color editColor = _detectionZoneColor;
|
||||||
@@ -307,14 +317,87 @@ namespace Camera
|
|||||||
isEditing = true;
|
isEditing = true;
|
||||||
editColor = _detectionZoneColor;
|
editColor = _detectionZoneColor;
|
||||||
}
|
}
|
||||||
else if (_isEditingLedZone)
|
else if (_isEditingLedZone && _currentLedIndex >= 0)
|
||||||
{
|
{
|
||||||
currentEditZone = scaledLedZone;
|
Rectangle ledZone = _camera.GetLedZone(_currentLedIndex);
|
||||||
|
currentEditZone = new Rectangle(
|
||||||
|
(int)(ledZone.X * scaleX),
|
||||||
|
(int)(ledZone.Y * scaleY),
|
||||||
|
(int)(ledZone.Width * scaleX),
|
||||||
|
(int)(ledZone.Height * scaleY)
|
||||||
|
);
|
||||||
isEditing = true;
|
isEditing = true;
|
||||||
editColor = _ledZoneColor;
|
editColor = _camera.GetLedZoneColor(_currentLedIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isEditing && currentEditZone.Width > 0 && currentEditZone.Height > 0)
|
if (_isDrawing && _isEditingLedZone && _startPoint != null && _currentMousePoint != null)
|
||||||
|
{
|
||||||
|
using (Pen pen = new Pen(_detectionZoneColor, 2))
|
||||||
|
{
|
||||||
|
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
|
||||||
|
g.DrawRectangle(pen, scaledDetectionZone);
|
||||||
|
}
|
||||||
|
|
||||||
|
int x = (int)(Math.Min(_startPoint.X, _startPoint.X + (_currentMousePoint.X - _resizeStartPoint.X) / scaleX) * scaleX);
|
||||||
|
int y = (int)(Math.Min(_startPoint.Y, _startPoint.Y + (_currentMousePoint.Y - _resizeStartPoint.Y) / scaleY) * scaleY);
|
||||||
|
int w = (int)(Math.Abs(_currentMousePoint.X - _resizeStartPoint.X));
|
||||||
|
int h = (int)(Math.Abs(_currentMousePoint.Y - _resizeStartPoint.Y));
|
||||||
|
|
||||||
|
if (w > 5 && h > 5)
|
||||||
|
{
|
||||||
|
Rectangle drawRect = new Rectangle(x, y, w, h);
|
||||||
|
Color currentLedColor = _currentLedIndex >= 0 && _camera != null ? _camera.GetLedZoneColor(_currentLedIndex) : Color.Lime;
|
||||||
|
using (Pen pen = new Pen(currentLedColor, 2))
|
||||||
|
{
|
||||||
|
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
|
||||||
|
g.DrawRectangle(pen, drawRect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (_isEditingLedZone && _currentLedIndex >= 0)
|
||||||
|
{
|
||||||
|
using (Pen pen = new Pen(_detectionZoneColor, 2))
|
||||||
|
{
|
||||||
|
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
|
||||||
|
g.DrawRectangle(pen, scaledDetectionZone);
|
||||||
|
}
|
||||||
|
|
||||||
|
var ledZones = _camera.GetLedZones();
|
||||||
|
foreach (var kvp in ledZones)
|
||||||
|
{
|
||||||
|
int index = kvp.Key;
|
||||||
|
Rectangle ledZone = kvp.Value;
|
||||||
|
Color ledColor = _camera.GetLedZoneColor(index);
|
||||||
|
|
||||||
|
Rectangle scaledLed = new Rectangle(
|
||||||
|
(int)(ledZone.X * scaleX),
|
||||||
|
(int)(ledZone.Y * scaleY),
|
||||||
|
(int)(ledZone.Width * scaleX),
|
||||||
|
(int)(ledZone.Height * scaleY)
|
||||||
|
);
|
||||||
|
|
||||||
|
using (Pen pen = new Pen(ledColor, 2))
|
||||||
|
{
|
||||||
|
g.DrawRectangle(pen, scaledLed);
|
||||||
|
}
|
||||||
|
|
||||||
|
using (Font font = new Font("Arial", 10))
|
||||||
|
{
|
||||||
|
g.DrawString(index.ToString(), font, new SolidBrush(ledColor), scaledLed.X, scaledLed.Y - 15);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentEditZone.Width > 0 && currentEditZone.Height > 0)
|
||||||
|
{
|
||||||
|
using (Pen pen = new Pen(editColor, 2))
|
||||||
|
{
|
||||||
|
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
|
||||||
|
g.DrawRectangle(pen, currentEditZone);
|
||||||
|
}
|
||||||
|
DrawEditHandles(g, currentEditZone, editColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (isEditing && currentEditZone.Width > 0 && currentEditZone.Height > 0)
|
||||||
{
|
{
|
||||||
using (Pen pen = new Pen(editColor, 2))
|
using (Pen pen = new Pen(editColor, 2))
|
||||||
{
|
{
|
||||||
@@ -331,14 +414,32 @@ namespace Camera
|
|||||||
g.DrawRectangle(pen, scaledDetectionZone);
|
g.DrawRectangle(pen, scaledDetectionZone);
|
||||||
}
|
}
|
||||||
|
|
||||||
using (Pen pen = new Pen(_ledZoneColor, 2))
|
if (_camera != null)
|
||||||
{
|
{
|
||||||
g.DrawRectangle(pen, scaledLedZone);
|
var ledZones = _camera.GetLedZones();
|
||||||
}
|
foreach (var kvp in ledZones)
|
||||||
|
{
|
||||||
|
int index = kvp.Key;
|
||||||
|
Rectangle ledZone = kvp.Value;
|
||||||
|
Color ledColor = _camera.GetLedZoneColor(index);
|
||||||
|
|
||||||
using (Font font = new Font("Arial", 10))
|
Rectangle scaledLed = new Rectangle(
|
||||||
{
|
(int)(ledZone.X * scaleX),
|
||||||
g.DrawString("Led区", font, new SolidBrush(_ledZoneColor), scaledLedZone.X, scaledLedZone.Y - 15);
|
(int)(ledZone.Y * scaleY),
|
||||||
|
(int)(ledZone.Width * scaleX),
|
||||||
|
(int)(ledZone.Height * scaleY)
|
||||||
|
);
|
||||||
|
|
||||||
|
using (Pen pen = new Pen(ledColor, 2))
|
||||||
|
{
|
||||||
|
g.DrawRectangle(pen, scaledLed);
|
||||||
|
}
|
||||||
|
|
||||||
|
using (Font font = new Font("Arial", 10))
|
||||||
|
{
|
||||||
|
g.DrawString(index.ToString(), font, new SolidBrush(ledColor), scaledLed.X, scaledLed.Y - 15);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -416,12 +517,69 @@ namespace Camera
|
|||||||
(int)(detectionZone.Height * scaleY)
|
(int)(detectionZone.Height * scaleY)
|
||||||
);
|
);
|
||||||
|
|
||||||
Rectangle scaledLedZone = new Rectangle(
|
var ledZones = _camera.GetLedZones();
|
||||||
(int)(ledZone.X * scaleX),
|
bool clickedOnLedZone = false;
|
||||||
(int)(ledZone.Y * scaleY),
|
int clickedLedIndex = -1;
|
||||||
(int)(ledZone.Width * scaleX),
|
|
||||||
(int)(ledZone.Height * scaleY)
|
foreach (var kvp in ledZones)
|
||||||
);
|
{
|
||||||
|
Rectangle led = kvp.Value;
|
||||||
|
Rectangle scaledLed = new Rectangle(
|
||||||
|
(int)(led.X * scaleX),
|
||||||
|
(int)(led.Y * scaleY),
|
||||||
|
(int)(led.Width * scaleX),
|
||||||
|
(int)(led.Height * scaleY)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (scaledLed.Width > 0 && scaledLed.Height > 0 && scaledLed.Contains(controlPoint))
|
||||||
|
{
|
||||||
|
if (!_isEditingDetectionZone && !_isEditingLedZone)
|
||||||
|
{
|
||||||
|
clickedOnLedZone = true;
|
||||||
|
clickedLedIndex = kvp.Key;
|
||||||
|
ledZone = led;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (_isEditingLedZone)
|
||||||
|
{
|
||||||
|
clickedOnLedZone = true;
|
||||||
|
clickedLedIndex = kvp.Key;
|
||||||
|
ledZone = led;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clickedOnLedZone)
|
||||||
|
{
|
||||||
|
_isEditingLedZone = true;
|
||||||
|
_currentLedIndex = clickedLedIndex;
|
||||||
|
_selectedZoneIndex = clickedLedIndex;
|
||||||
|
_ledZoneState = 1; // 选中状态
|
||||||
|
toolStripButton2.Checked = true;
|
||||||
|
toolStripButton2.Visible = false;
|
||||||
|
toolStripButton1.Visible = false;
|
||||||
|
UpdateLedZoneButtonsVisibility(1);
|
||||||
|
UpdateColorButtonIcon();
|
||||||
|
_isMoving = true;
|
||||||
|
_startPoint = imagePoint;
|
||||||
|
_resizeStartPoint = controlPoint;
|
||||||
|
_originalZone = ledZone;
|
||||||
|
picBoxCamera.Invalidate();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle scaledLedZone = new Rectangle(0, 0, 0, 0);
|
||||||
|
if (_isEditingLedZone && _currentLedIndex >= 0)
|
||||||
|
{
|
||||||
|
Rectangle led = _camera.GetLedZone(_currentLedIndex);
|
||||||
|
scaledLedZone = new Rectangle(
|
||||||
|
(int)(led.X * scaleX),
|
||||||
|
(int)(led.Y * scaleY),
|
||||||
|
(int)(led.Width * scaleX),
|
||||||
|
(int)(led.Height * scaleY)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (_isEditingDetectionZone || _isEditingLedZone)
|
if (_isEditingDetectionZone || _isEditingLedZone)
|
||||||
{
|
{
|
||||||
@@ -434,13 +592,21 @@ namespace Camera
|
|||||||
_resizeStartPoint = controlPoint;
|
_resizeStartPoint = controlPoint;
|
||||||
_originalResizeRect = editRect;
|
_originalResizeRect = editRect;
|
||||||
}
|
}
|
||||||
else if (editRect.Contains(controlPoint))
|
else if (editRect.Width > 0 && editRect.Height > 0 && editRect.Contains(controlPoint))
|
||||||
{
|
{
|
||||||
_isMoving = true;
|
_isMoving = true;
|
||||||
_startPoint = imagePoint;
|
_startPoint = imagePoint;
|
||||||
_resizeStartPoint = controlPoint;
|
_resizeStartPoint = controlPoint;
|
||||||
_originalZone = _isEditingDetectionZone ? detectionZone : ledZone;
|
_originalZone = _isEditingDetectionZone ? detectionZone : ledZone;
|
||||||
}
|
}
|
||||||
|
else if (_isEditingLedZone)
|
||||||
|
{
|
||||||
|
_currentLedIndex = -1;
|
||||||
|
_selectedZoneIndex = -1;
|
||||||
|
_ledZoneState = 2; // 切换到绘制状态
|
||||||
|
UpdateLedZoneButtonsVisibility(2);
|
||||||
|
picBoxCamera.Invalidate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -452,14 +618,6 @@ namespace Camera
|
|||||||
_resizeStartPoint = controlPoint;
|
_resizeStartPoint = controlPoint;
|
||||||
_originalZone = detectionZone;
|
_originalZone = detectionZone;
|
||||||
}
|
}
|
||||||
else if (ledZone.Contains(imagePoint))
|
|
||||||
{
|
|
||||||
_selectedZoneIndex = 1;
|
|
||||||
_isMoving = true;
|
|
||||||
_startPoint = imagePoint;
|
|
||||||
_resizeStartPoint = controlPoint;
|
|
||||||
_originalZone = ledZone;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_selectedZoneIndex = -1;
|
_selectedZoneIndex = -1;
|
||||||
@@ -474,6 +632,7 @@ namespace Camera
|
|||||||
|
|
||||||
private void PicBoxCamera_MouseMove(object sender, MouseEventArgs e)
|
private void PicBoxCamera_MouseMove(object sender, MouseEventArgs e)
|
||||||
{
|
{
|
||||||
|
_currentMousePoint = e.Location;
|
||||||
Image currentImage = picBoxCamera.Image;
|
Image currentImage = picBoxCamera.Image;
|
||||||
if (currentImage == null || _camera == null) return;
|
if (currentImage == null || _camera == null) return;
|
||||||
|
|
||||||
@@ -501,12 +660,17 @@ namespace Camera
|
|||||||
(int)(detectionZone.Height * scaleY)
|
(int)(detectionZone.Height * scaleY)
|
||||||
);
|
);
|
||||||
|
|
||||||
Rectangle scaledLedZone = new Rectangle(
|
Rectangle scaledLedZone = new Rectangle(0, 0, 0, 0);
|
||||||
(int)(ledZone.X * scaleX),
|
if (_currentLedIndex >= 0)
|
||||||
(int)(ledZone.Y * scaleY),
|
{
|
||||||
(int)(ledZone.Width * scaleX),
|
Rectangle led = _camera.GetLedZone(_currentLedIndex);
|
||||||
(int)(ledZone.Height * scaleY)
|
scaledLedZone = new Rectangle(
|
||||||
);
|
(int)(led.X * scaleX),
|
||||||
|
(int)(led.Y * scaleY),
|
||||||
|
(int)(led.Width * scaleX),
|
||||||
|
(int)(led.Height * scaleY)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (_isEditingDetectionZone || _isEditingLedZone)
|
if (_isEditingDetectionZone || _isEditingLedZone)
|
||||||
{
|
{
|
||||||
@@ -540,7 +704,7 @@ namespace Camera
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_camera.SetLedZone(newZone);
|
_camera.SetLedZone(_currentLedIndex, newZone);
|
||||||
}
|
}
|
||||||
picBoxCamera.Update();
|
picBoxCamera.Update();
|
||||||
}
|
}
|
||||||
@@ -569,7 +733,7 @@ namespace Camera
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_camera.SetLedZone(newZone);
|
_camera.SetLedZone(_currentLedIndex, newZone);
|
||||||
}
|
}
|
||||||
picBoxCamera.Update();
|
picBoxCamera.Update();
|
||||||
}
|
}
|
||||||
@@ -612,9 +776,9 @@ namespace Camera
|
|||||||
{
|
{
|
||||||
_camera.SetDetectionZone(newZone);
|
_camera.SetDetectionZone(newZone);
|
||||||
}
|
}
|
||||||
else if (_selectedZoneIndex == 1)
|
else if (_selectedZoneIndex > 0)
|
||||||
{
|
{
|
||||||
_camera.SetLedZone(newZone);
|
_camera.SetLedZone(_selectedZoneIndex, newZone);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -644,10 +808,13 @@ namespace Camera
|
|||||||
_isEditingLedZone = false;
|
_isEditingLedZone = false;
|
||||||
_isMoving = false;
|
_isMoving = false;
|
||||||
_isResizing = false;
|
_isResizing = false;
|
||||||
|
_currentLedIndex = -1;
|
||||||
|
_selectedZoneIndex = -1;
|
||||||
|
_ledZoneState = 0; // 就绪状态
|
||||||
toolStripButton2.Checked = false;
|
toolStripButton2.Checked = false;
|
||||||
toolStripButton2.ToolTipText = "绘制Led区(点击开启)";
|
toolStripButton2.ToolTipText = "绘制Led区(点击开启)";
|
||||||
toolStripButton1.Visible = true;
|
toolStripButton1.Visible = true;
|
||||||
toolStripButton3.Visible = false;
|
UpdateLedZoneButtonsVisibility(0);
|
||||||
picBoxCamera.Invalidate();
|
picBoxCamera.Invalidate();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -682,8 +849,14 @@ namespace Camera
|
|||||||
{
|
{
|
||||||
if (toolStripButton2.Checked)
|
if (toolStripButton2.Checked)
|
||||||
{
|
{
|
||||||
_camera.SetLedZone(new Rectangle(x, y, width, height));
|
int newIndex = _camera.GetLedZoneCount() + 1;
|
||||||
_selectedZoneIndex = 1;
|
_camera.AddLedZone(newIndex, new Rectangle(x, y, width, height), Color.Lime);
|
||||||
|
_selectedZoneIndex = newIndex;
|
||||||
|
_currentLedIndex = newIndex;
|
||||||
|
_isEditingLedZone = true;
|
||||||
|
_ledZoneState = 1; // 选中状态
|
||||||
|
UpdateLedZoneButtonsVisibility(1);
|
||||||
|
UpdateColorButtonIcon();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -817,7 +990,6 @@ namespace Camera
|
|||||||
toolStripButton3.Visible = true;
|
toolStripButton3.Visible = true;
|
||||||
UpdateColorButtonIcon();
|
UpdateColorButtonIcon();
|
||||||
toolStripButton2.ToolTipText = "绘制Led区(点击开启/关闭)";
|
toolStripButton2.ToolTipText = "绘制Led区(点击开启/关闭)";
|
||||||
_tempZone = _camera.GetDetectionZone();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -837,22 +1009,25 @@ namespace Camera
|
|||||||
{
|
{
|
||||||
_isEditingLedZone = true;
|
_isEditingLedZone = true;
|
||||||
_isEditingDetectionZone = false;
|
_isEditingDetectionZone = false;
|
||||||
_selectedZoneIndex = 1;
|
_selectedZoneIndex = -1;
|
||||||
|
_currentLedIndex = -1;
|
||||||
|
_ledZoneState = 2; // 绘制状态
|
||||||
toolStripButton2.ToolTipText = "绘制Led区(点击关闭)";
|
toolStripButton2.ToolTipText = "绘制Led区(点击关闭)";
|
||||||
toolStripButton1.Checked = false;
|
toolStripButton1.Checked = false;
|
||||||
toolStripButton1.Visible = false;
|
toolStripButton1.Visible = false;
|
||||||
toolStripButton3.Visible = true;
|
UpdateLedZoneButtonsVisibility(2);
|
||||||
UpdateColorButtonIcon();
|
UpdateColorButtonIcon();
|
||||||
toolStripButton1.ToolTipText = "修改检测区(点击开启/关闭)";
|
toolStripButton1.ToolTipText = "修改检测区(点击开启/关闭)";
|
||||||
_tempZone = _camera.GetLedZone();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_isEditingLedZone = false;
|
_isEditingLedZone = false;
|
||||||
|
_currentLedIndex = -1;
|
||||||
_selectedZoneIndex = -1;
|
_selectedZoneIndex = -1;
|
||||||
|
_ledZoneState = 0; // 就绪状态
|
||||||
toolStripButton2.ToolTipText = "绘制Led区(点击开启)";
|
toolStripButton2.ToolTipText = "绘制Led区(点击开启)";
|
||||||
toolStripButton1.Visible = true;
|
toolStripButton1.Visible = true;
|
||||||
toolStripButton3.Visible = false;
|
UpdateLedZoneButtonsVisibility(0);
|
||||||
}
|
}
|
||||||
picBoxCamera.Invalidate();
|
picBoxCamera.Invalidate();
|
||||||
UpdateDataGridView();
|
UpdateDataGridView();
|
||||||
@@ -867,9 +1042,9 @@ namespace Camera
|
|||||||
{
|
{
|
||||||
colorDialog.Color = _detectionZoneColor;
|
colorDialog.Color = _detectionZoneColor;
|
||||||
}
|
}
|
||||||
else if (_isEditingLedZone)
|
else if (_isEditingLedZone && _currentLedIndex >= 0)
|
||||||
{
|
{
|
||||||
colorDialog.Color = _ledZoneColor;
|
colorDialog.Color = _camera.GetLedZoneColor(_currentLedIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (colorDialog.ShowDialog() == DialogResult.OK)
|
if (colorDialog.ShowDialog() == DialogResult.OK)
|
||||||
@@ -878,9 +1053,9 @@ namespace Camera
|
|||||||
{
|
{
|
||||||
_detectionZoneColor = colorDialog.Color;
|
_detectionZoneColor = colorDialog.Color;
|
||||||
}
|
}
|
||||||
else if (_isEditingLedZone)
|
else if (_isEditingLedZone && _currentLedIndex >= 0)
|
||||||
{
|
{
|
||||||
_ledZoneColor = colorDialog.Color;
|
_camera.SetLedZoneColor(_currentLedIndex, colorDialog.Color);
|
||||||
}
|
}
|
||||||
UpdateColorButtonIcon();
|
UpdateColorButtonIcon();
|
||||||
picBoxCamera.Invalidate();
|
picBoxCamera.Invalidate();
|
||||||
@@ -888,9 +1063,40 @@ namespace Camera
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ToolStripButton4_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (_isEditingLedZone && _currentLedIndex >= 0)
|
||||||
|
{
|
||||||
|
_camera.RemoveLedZone(_currentLedIndex);
|
||||||
|
_currentLedIndex = -1;
|
||||||
|
_selectedZoneIndex = -1;
|
||||||
|
_isEditingLedZone = false;
|
||||||
|
_ledZoneState = 0; // 就绪状态
|
||||||
|
toolStripButton2.Checked = false;
|
||||||
|
toolStripButton2.Visible = true;
|
||||||
|
toolStripButton2.ToolTipText = "绘制Led区(点击开启)";
|
||||||
|
toolStripButton1.Visible = true;
|
||||||
|
UpdateLedZoneButtonsVisibility(0);
|
||||||
|
UpdateDataGridView();
|
||||||
|
picBoxCamera.Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void UpdateColorButtonIcon()
|
private void UpdateColorButtonIcon()
|
||||||
{
|
{
|
||||||
Color currentColor = _isEditingDetectionZone ? _detectionZoneColor : _ledZoneColor;
|
Color currentColor;
|
||||||
|
if (_isEditingDetectionZone)
|
||||||
|
{
|
||||||
|
currentColor = _detectionZoneColor;
|
||||||
|
}
|
||||||
|
else if (_isEditingLedZone && _currentLedIndex >= 0)
|
||||||
|
{
|
||||||
|
currentColor = _camera.GetLedZoneColor(_currentLedIndex);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentColor = _camera.GetLedZoneColor();
|
||||||
|
}
|
||||||
Bitmap bmp = new Bitmap(24, 24);
|
Bitmap bmp = new Bitmap(24, 24);
|
||||||
using (Graphics g = Graphics.FromImage(bmp))
|
using (Graphics g = Graphics.FromImage(bmp))
|
||||||
{
|
{
|
||||||
@@ -903,12 +1109,33 @@ namespace Camera
|
|||||||
toolStripButton3.Image = bmp;
|
toolStripButton3.Image = bmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateLedZoneButtonsVisibility(int state)
|
||||||
|
{
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case 0: // 就绪状态
|
||||||
|
toolStripButton2.Visible = true;
|
||||||
|
toolStripButton3.Visible = false;
|
||||||
|
toolStripButton4.Visible = false;
|
||||||
|
break;
|
||||||
|
case 1: // 选中状态
|
||||||
|
toolStripButton2.Visible = false;
|
||||||
|
toolStripButton3.Visible = true;
|
||||||
|
toolStripButton4.Visible = true;
|
||||||
|
break;
|
||||||
|
case 2: // 绘制状态
|
||||||
|
toolStripButton2.Visible = true;
|
||||||
|
toolStripButton3.Visible = true;
|
||||||
|
toolStripButton4.Visible = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void Setting_FormClosed(object sender, FormClosedEventArgs e)
|
private void Setting_FormClosed(object sender, FormClosedEventArgs e)
|
||||||
{
|
{
|
||||||
if (_camera != null)
|
if (_camera != null)
|
||||||
{
|
{
|
||||||
_camera.SetDetectionZoneColor(_detectionZoneColor);
|
_camera.SetDetectionZoneColor(_detectionZoneColor);
|
||||||
_camera.SetLedZoneColor(_ledZoneColor);
|
|
||||||
_camera.SaveConfig();
|
_camera.SaveConfig();
|
||||||
_camera.ImageCaptured -= Camera_ImageCaptured;
|
_camera.ImageCaptured -= Camera_ImageCaptured;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user