增加精细调整

This commit is contained in:
zqm
2026-03-26 13:35:48 +08:00
parent ad6c439a22
commit ec175d3e20
4 changed files with 427 additions and 31 deletions

View File

@@ -54,6 +54,7 @@
<Compile Include="Setting.Designer.cs">
<DependentUpon>Setting.cs</DependentUpon>
</Compile>
<Compile Include="ToolStripNumericUpDown.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Setting.resx">

View File

@@ -22,11 +22,19 @@ namespace Camera
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.dataGridView1 = new System.Windows.Forms.DataGridView();
this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton3 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton4 = new System.Windows.Forms.ToolStripButton();
this.toolStripTextBox1 = new System.Windows.Forms.ToolStripTextBox();
this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();
this.toolStripNumericUpDown1 = new ToolStripNumericUpDown();
this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();
this.toolStripNumericUpDown2 = new ToolStripNumericUpDown();
this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();
this.toolStripNumericUpDown3 = new ToolStripNumericUpDown();
this.toolStripLabel4 = new System.Windows.Forms.ToolStripLabel();
this.toolStripNumericUpDown4 = new ToolStripNumericUpDown();
this.dataGridView1 = new System.Windows.Forms.DataGridView();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
@@ -66,7 +74,6 @@ namespace Camera
this.picBoxCamera.Location = new System.Drawing.Point(0, 0);
this.picBoxCamera.Name = "picBoxCamera";
this.picBoxCamera.Size = new System.Drawing.Size(700, 515);
this.picBoxCamera.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Normal;
this.picBoxCamera.TabIndex = 0;
this.picBoxCamera.TabStop = false;
this.picBoxCamera.SizeChanged += new System.EventHandler(this.PicBoxCamera_SizeChanged);
@@ -104,10 +111,18 @@ namespace Camera
this.toolStripButton2,
this.toolStripButton3,
this.toolStripButton4,
this.toolStripTextBox1});
this.toolStripTextBox1,
this.toolStripLabel1,
this.toolStripNumericUpDown1,
this.toolStripLabel2,
this.toolStripNumericUpDown2,
this.toolStripLabel3,
this.toolStripNumericUpDown3,
this.toolStripLabel4,
this.toolStripNumericUpDown4});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(80, 40);
this.toolStrip1.Size = new System.Drawing.Size(58, 25);
this.toolStrip1.TabIndex = 0;
this.toolStrip1.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.toolStrip1_ItemClicked);
//
@@ -116,7 +131,7 @@ namespace Camera
this.toolStripButton1.CheckOnClick = true;
this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripButton1.Name = "toolStripButton1";
this.toolStripButton1.Size = new System.Drawing.Size(36, 36);
this.toolStripButton1.Size = new System.Drawing.Size(23, 22);
this.toolStripButton1.ToolTipText = "修改检测区(点击开启/关闭)";
this.toolStripButton1.Click += new System.EventHandler(this.ToolStripButton1_Click);
//
@@ -125,7 +140,7 @@ namespace Camera
this.toolStripButton2.CheckOnClick = true;
this.toolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripButton2.Name = "toolStripButton2";
this.toolStripButton2.Size = new System.Drawing.Size(36, 36);
this.toolStripButton2.Size = new System.Drawing.Size(23, 22);
this.toolStripButton2.ToolTipText = "绘制Led区(点击开启/关闭)";
this.toolStripButton2.Click += new System.EventHandler(this.ToolStripButton2_Click);
//
@@ -133,7 +148,7 @@ namespace Camera
//
this.toolStripButton3.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripButton3.Name = "toolStripButton3";
this.toolStripButton3.Size = new System.Drawing.Size(36, 36);
this.toolStripButton3.Size = new System.Drawing.Size(23, 28);
this.toolStripButton3.ToolTipText = "选择颜色";
this.toolStripButton3.Visible = false;
this.toolStripButton3.Click += new System.EventHandler(this.ToolStripButton3_Click);
@@ -142,7 +157,7 @@ namespace Camera
//
this.toolStripButton4.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripButton4.Name = "toolStripButton4";
this.toolStripButton4.Size = new System.Drawing.Size(36, 36);
this.toolStripButton4.Size = new System.Drawing.Size(23, 28);
this.toolStripButton4.ToolTipText = "删除Led区";
this.toolStripButton4.Visible = false;
this.toolStripButton4.Click += new System.EventHandler(this.ToolStripButton4_Click);
@@ -158,6 +173,154 @@ namespace Camera
this.toolStripTextBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ToolStripTextBox1_KeyDown);
this.toolStripTextBox1.TextChanged += new System.EventHandler(this.ToolStripTextBox1_TextChanged);
//
// toolStripLabel1
//
this.toolStripLabel1.Name = "toolStripLabel1";
this.toolStripLabel1.Size = new System.Drawing.Size(23, 27);
this.toolStripLabel1.Text = "X:";
this.toolStripLabel1.Visible = false;
//
// toolStripNumericUpDown1
//
this.toolStripNumericUpDown1.AutoSize = false;
this.toolStripNumericUpDown1.DecimalPlaces = 0;
this.toolStripNumericUpDown1.Increment = new decimal(new int[] {
1,
0,
0,
0});
this.toolStripNumericUpDown1.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.toolStripNumericUpDown1.Minimum = new decimal(new int[] {
0,
0,
0,
0});
this.toolStripNumericUpDown1.Name = "toolStripNumericUpDown1";
this.toolStripNumericUpDown1.Size = new System.Drawing.Size(60, 27);
this.toolStripNumericUpDown1.ToolTipText = "X坐标";
this.toolStripNumericUpDown1.Value = new decimal(new int[] {
0,
0,
0,
0});
this.toolStripNumericUpDown1.Visible = false;
this.toolStripNumericUpDown1.ValueChanged += new System.EventHandler(this.ToolStripNumericUpDown1_ValueChanged);
//
// toolStripLabel2
//
this.toolStripLabel2.Name = "toolStripLabel2";
this.toolStripLabel2.Size = new System.Drawing.Size(22, 27);
this.toolStripLabel2.Text = "Y:";
this.toolStripLabel2.Visible = false;
//
// toolStripNumericUpDown2
//
this.toolStripNumericUpDown2.AutoSize = false;
this.toolStripNumericUpDown2.DecimalPlaces = 0;
this.toolStripNumericUpDown2.Increment = new decimal(new int[] {
1,
0,
0,
0});
this.toolStripNumericUpDown2.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.toolStripNumericUpDown2.Minimum = new decimal(new int[] {
0,
0,
0,
0});
this.toolStripNumericUpDown2.Name = "toolStripNumericUpDown2";
this.toolStripNumericUpDown2.Size = new System.Drawing.Size(60, 27);
this.toolStripNumericUpDown2.ToolTipText = "Y坐标";
this.toolStripNumericUpDown2.Value = new decimal(new int[] {
0,
0,
0,
0});
this.toolStripNumericUpDown2.Visible = false;
this.toolStripNumericUpDown2.ValueChanged += new System.EventHandler(this.ToolStripNumericUpDown2_ValueChanged);
//
// toolStripLabel3
//
this.toolStripLabel3.Name = "toolStripLabel3";
this.toolStripLabel3.Size = new System.Drawing.Size(28, 27);
this.toolStripLabel3.Text = "W:";
this.toolStripLabel3.Visible = false;
//
// toolStripNumericUpDown3
//
this.toolStripNumericUpDown3.AutoSize = false;
this.toolStripNumericUpDown3.DecimalPlaces = 0;
this.toolStripNumericUpDown3.Increment = new decimal(new int[] {
1,
0,
0,
0});
this.toolStripNumericUpDown3.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.toolStripNumericUpDown3.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.toolStripNumericUpDown3.Name = "toolStripNumericUpDown3";
this.toolStripNumericUpDown3.Size = new System.Drawing.Size(60, 27);
this.toolStripNumericUpDown3.ToolTipText = "宽度";
this.toolStripNumericUpDown3.Value = new decimal(new int[] {
1,
0,
0,
0});
this.toolStripNumericUpDown3.Visible = false;
this.toolStripNumericUpDown3.ValueChanged += new System.EventHandler(this.ToolStripNumericUpDown3_ValueChanged);
//
// toolStripLabel4
//
this.toolStripLabel4.Name = "toolStripLabel4";
this.toolStripLabel4.Size = new System.Drawing.Size(25, 27);
this.toolStripLabel4.Text = "H:";
this.toolStripLabel4.Visible = false;
//
// toolStripNumericUpDown4
//
this.toolStripNumericUpDown4.AutoSize = false;
this.toolStripNumericUpDown4.DecimalPlaces = 0;
this.toolStripNumericUpDown4.Increment = new decimal(new int[] {
1,
0,
0,
0});
this.toolStripNumericUpDown4.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.toolStripNumericUpDown4.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.toolStripNumericUpDown4.Name = "toolStripNumericUpDown4";
this.toolStripNumericUpDown4.Size = new System.Drawing.Size(60, 27);
this.toolStripNumericUpDown4.ToolTipText = "高度";
this.toolStripNumericUpDown4.Value = new decimal(new int[] {
1,
0,
0,
0});
this.toolStripNumericUpDown4.Visible = false;
this.toolStripNumericUpDown4.ValueChanged += new System.EventHandler(this.ToolStripNumericUpDown4_ValueChanged);
//
// dataGridView1
//
this.dataGridView1.AllowUserToAddRows = false;
@@ -172,6 +335,7 @@ namespace Camera
this.dataGridView1.RowHeadersVisible = false;
this.dataGridView1.RowTemplate.Height = 25;
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridView1.Size = new System.Drawing.Size(559, 254);
this.dataGridView1.TabIndex = 0;
this.dataGridView1.SelectionChanged += new System.EventHandler(this.DataGridView1_SelectionChanged);
//
@@ -214,6 +378,14 @@ namespace Camera
private System.Windows.Forms.ToolStripButton toolStripButton3;
private System.Windows.Forms.ToolStripButton toolStripButton4;
private System.Windows.Forms.ToolStripTextBox toolStripTextBox1;
private System.Windows.Forms.ToolStripLabel toolStripLabel1;
private ToolStripNumericUpDown toolStripNumericUpDown1;
private System.Windows.Forms.ToolStripLabel toolStripLabel2;
private ToolStripNumericUpDown toolStripNumericUpDown2;
private System.Windows.Forms.ToolStripLabel toolStripLabel3;
private ToolStripNumericUpDown toolStripNumericUpDown3;
private System.Windows.Forms.ToolStripLabel toolStripLabel4;
private ToolStripNumericUpDown toolStripNumericUpDown4;
private System.Windows.Forms.DataGridView dataGridView1;
}
}

View File

@@ -18,8 +18,8 @@ namespace Camera
private bool _isDrawing = false;
private bool _isMoving = false;
private bool _isResizing = false;
private Point _startPoint;
private Point _currentMousePoint;
private Point? _startPoint;
private Point? _currentMousePoint;
private Rectangle _originalZone;
private bool _isEditingDetectionZone = false;
private bool _isEditingLedZone = false;
@@ -70,20 +70,22 @@ namespace Camera
private void InitializeDataGridView()
{
dataGridView1.Columns.Clear();
dataGridView1.Columns.Add("Index", "索引");
dataGridView1.Columns.Add("X", "X坐标");
dataGridView1.Columns.Add("Y", "Y坐标");
dataGridView1.Columns.Add("Width", "宽度");
dataGridView1.Columns.Add("Height", "度");
dataGridView1.Columns.Add("Color", "颜色");
if (dataGridView1.Columns.Count == 0)
{
dataGridView1.Columns.Add("Index", "索引");
dataGridView1.Columns.Add("X", "X坐标");
dataGridView1.Columns.Add("Y", "Y坐标");
dataGridView1.Columns.Add("Width", "度");
dataGridView1.Columns.Add("Height", "高度");
dataGridView1.Columns.Add("Color", "颜色");
dataGridView1.Columns["Index"].Width = 50;
dataGridView1.Columns["X"].Width = 60;
dataGridView1.Columns["Y"].Width = 60;
dataGridView1.Columns["Width"].Width = 60;
dataGridView1.Columns["Height"].Width = 60;
dataGridView1.Columns["Color"].Width = 70;
dataGridView1.Columns["Index"].Width = 50;
dataGridView1.Columns["X"].Width = 60;
dataGridView1.Columns["Y"].Width = 60;
dataGridView1.Columns["Width"].Width = 60;
dataGridView1.Columns["Height"].Width = 60;
dataGridView1.Columns["Color"].Width = 70;
}
}
private void Setting_Load(object sender, EventArgs e)
@@ -359,10 +361,14 @@ namespace Camera
}
}
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));
int x = 0, y = 0, w = 0, h = 0;
if (_startPoint.HasValue && _currentMousePoint.HasValue)
{
x = (int)(Math.Min(_startPoint.Value.X, _startPoint.Value.X + (_currentMousePoint.Value.X - _resizeStartPoint.X) / scaleX) * scaleX);
y = (int)(Math.Min(_startPoint.Value.Y, _startPoint.Value.Y + (_currentMousePoint.Value.Y - _resizeStartPoint.Y) / scaleY) * scaleY);
w = (int)(Math.Abs(_currentMousePoint.Value.X - _resizeStartPoint.X));
h = (int)(Math.Abs(_currentMousePoint.Value.Y - _resizeStartPoint.Y));
}
if (w > 5 && h > 5)
{
@@ -876,10 +882,14 @@ namespace Camera
if (_isDrawing)
{
int x = Math.Min(_startPoint.X, imagePoint.X);
int y = Math.Min(_startPoint.Y, imagePoint.Y);
int width = Math.Abs(imagePoint.X - _startPoint.X);
int height = Math.Abs(imagePoint.Y - _startPoint.Y);
int x = 0, y = 0, width = 0, height = 0;
if (_startPoint.HasValue)
{
x = Math.Min(_startPoint.Value.X, imagePoint.X);
y = Math.Min(_startPoint.Value.Y, imagePoint.Y);
width = Math.Abs(imagePoint.X - _startPoint.Value.X);
height = Math.Abs(imagePoint.Y - _startPoint.Value.Y);
}
if (width > 5 && height > 5)
{
@@ -1015,6 +1025,17 @@ namespace Camera
if (dataGridView1.SelectedRows.Count > 0)
{
_selectedZoneIndex = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Index"].Value);
// 更新位置和宽高值
if (_selectedZoneIndex >= 0 && _camera != null)
{
Rectangle zone = _camera.GetLedZone(_selectedZoneIndex);
toolStripNumericUpDown1.Value = zone.X;
toolStripNumericUpDown2.Value = zone.Y;
toolStripNumericUpDown3.Value = zone.Width;
toolStripNumericUpDown4.Value = zone.Height;
}
// 确保控件在就绪状态下显示
UpdateLedZoneButtonsVisibility(0);
picBoxCamera.Invalidate();
}
}
@@ -1214,6 +1235,24 @@ namespace Camera
toolStripButton4.Visible = false;
toolStripTextBox1.Visible = false;
toolStripTextBox1.Text = "";
// 显示位置和宽高设置框
toolStripLabel1.Visible = true;
toolStripNumericUpDown1.Visible = true;
toolStripLabel2.Visible = true;
toolStripNumericUpDown2.Visible = true;
toolStripLabel3.Visible = true;
toolStripNumericUpDown3.Visible = true;
toolStripLabel4.Visible = true;
toolStripNumericUpDown4.Visible = true;
// 更新位置和宽高值
if (_selectedZoneIndex >= 0 && _camera != null)
{
Rectangle zone = _camera.GetLedZone(_selectedZoneIndex);
toolStripNumericUpDown1.Value = zone.X;
toolStripNumericUpDown2.Value = zone.Y;
toolStripNumericUpDown3.Value = zone.Width;
toolStripNumericUpDown4.Value = zone.Height;
}
break;
case 1: // 选中状态
toolStripButton2.Visible = false;
@@ -1221,6 +1260,15 @@ namespace Camera
toolStripButton4.Visible = true;
toolStripTextBox1.Visible = true;
toolStripTextBox1.Text = _currentLedIndex.ToString();
// 不显示位置和宽高设置框
toolStripLabel1.Visible = false;
toolStripNumericUpDown1.Visible = false;
toolStripLabel2.Visible = false;
toolStripNumericUpDown2.Visible = false;
toolStripLabel3.Visible = false;
toolStripNumericUpDown3.Visible = false;
toolStripLabel4.Visible = false;
toolStripNumericUpDown4.Visible = false;
break;
case 2: // 绘制状态
toolStripButton2.Visible = true;
@@ -1228,6 +1276,14 @@ namespace Camera
toolStripButton4.Visible = false;
toolStripTextBox1.Visible = false;
toolStripTextBox1.Text = "";
toolStripLabel1.Visible = false;
toolStripNumericUpDown1.Visible = false;
toolStripLabel2.Visible = false;
toolStripNumericUpDown2.Visible = false;
toolStripLabel3.Visible = false;
toolStripNumericUpDown3.Visible = false;
toolStripLabel4.Visible = false;
toolStripNumericUpDown4.Visible = false;
break;
}
}
@@ -1246,5 +1302,61 @@ namespace Camera
{
}
// X坐标相关事件
private void ToolStripNumericUpDown1_ValueChanged(object sender, EventArgs e)
{
int index = _currentLedIndex >= 0 ? _currentLedIndex : _selectedZoneIndex;
if (index < 0 || _camera == null) return;
int x = (int)toolStripNumericUpDown1.Value;
Rectangle zone = _camera.GetLedZone(index);
zone.X = x;
_camera.SetLedZone(index, zone);
UpdateDataGridView();
picBoxCamera.Invalidate();
}
// Y坐标相关事件
private void ToolStripNumericUpDown2_ValueChanged(object sender, EventArgs e)
{
int index = _currentLedIndex >= 0 ? _currentLedIndex : _selectedZoneIndex;
if (index < 0 || _camera == null) return;
int y = (int)toolStripNumericUpDown2.Value;
Rectangle zone = _camera.GetLedZone(index);
zone.Y = y;
_camera.SetLedZone(index, zone);
UpdateDataGridView();
picBoxCamera.Invalidate();
}
// 宽度相关事件
private void ToolStripNumericUpDown3_ValueChanged(object sender, EventArgs e)
{
int index = _currentLedIndex >= 0 ? _currentLedIndex : _selectedZoneIndex;
if (index < 0 || _camera == null) return;
int width = (int)toolStripNumericUpDown3.Value;
Rectangle zone = _camera.GetLedZone(index);
zone.Width = width;
_camera.SetLedZone(index, zone);
UpdateDataGridView();
picBoxCamera.Invalidate();
}
// 高度相关事件
private void ToolStripNumericUpDown4_ValueChanged(object sender, EventArgs e)
{
int index = _currentLedIndex >= 0 ? _currentLedIndex : _selectedZoneIndex;
if (index < 0 || _camera == null) return;
int height = (int)toolStripNumericUpDown4.Value;
Rectangle zone = _camera.GetLedZone(index);
zone.Height = height;
_camera.SetLedZone(index, zone);
UpdateDataGridView();
picBoxCamera.Invalidate();
}
}
}

View File

@@ -0,0 +1,111 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace Camera
{
// 自定义ToolStripNumericUpDown控件
[System.ComponentModel.ToolboxItem(false)]
[System.ComponentModel.DesignerCategory("Code")]
public class ToolStripNumericUpDown : ToolStripControlHost
{
private NumericUpDown _numericUpDown;
// 公开的无参构造函数 - 设计器必需
public ToolStripNumericUpDown() : this(new NumericUpDown()) { }
// 私有的带参数构造函数 - 仅用于无参构造函数调用
private ToolStripNumericUpDown(NumericUpDown numericUpDown) : base(numericUpDown)
{
_numericUpDown = numericUpDown ?? throw new ArgumentNullException(nameof(numericUpDown));
this.AutoSize = false;
// 设置NumericUpDown的基本属性
_numericUpDown.Size = new Size(60, 22);
_numericUpDown.TextAlign = HorizontalAlignment.Right;
}
[System.ComponentModel.Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public NumericUpDown NumericUpDownControl => _numericUpDown;
// 下面的属性、事件都保持不变
public decimal Value
{
get => _numericUpDown.Value;
set => _numericUpDown.Value = value;
}
public decimal Minimum
{
get => _numericUpDown.Minimum;
set => _numericUpDown.Minimum = value;
}
public decimal Maximum
{
get => _numericUpDown.Maximum;
set => _numericUpDown.Maximum = value;
}
public decimal Increment
{
get => _numericUpDown.Increment;
set => _numericUpDown.Increment = value;
}
public int DecimalPlaces
{
get => _numericUpDown.DecimalPlaces;
set => _numericUpDown.DecimalPlaces = value;
}
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new string Text
{
get => _numericUpDown.Text;
set => _numericUpDown.Text = value;
}
public event EventHandler ValueChanged;
protected override void OnSubscribeControlEvents(Control control)
{
base.OnSubscribeControlEvents(control);
if (control is NumericUpDown nud)
nud.ValueChanged += Nud_ValueChanged;
}
protected override void OnUnsubscribeControlEvents(Control control)
{
base.OnUnsubscribeControlEvents(control);
if (control is NumericUpDown nud)
nud.ValueChanged -= Nud_ValueChanged;
}
private void Nud_ValueChanged(object sender, EventArgs e)
{
ValueChanged?.Invoke(this, e);
}
protected override Size DefaultSize => new Size(60, 27);
// 重写GetPreferredSize以改进布局
public override Size GetPreferredSize(Size constrainingSize)
{
return new Size(base.GetPreferredSize(constrainingSize).Width, 27);
}
// 清理资源
protected override void Dispose(bool disposing)
{
if (disposing && _numericUpDown != null)
{
_numericUpDown.Dispose();
}
base.Dispose(disposing);
}
}
}