调节表格
This commit is contained in:
@@ -23,7 +23,7 @@ namespace Camera
|
|||||||
private const string PASSWD = "Yexian.net.168";
|
private const string PASSWD = "Yexian.net.168";
|
||||||
|
|
||||||
// 调试模式
|
// 调试模式
|
||||||
private const Boolean IsDebug = true;
|
private const Boolean IsDebug = false;
|
||||||
|
|
||||||
// 配置文件目录
|
// 配置文件目录
|
||||||
private string _configPath;
|
private string _configPath;
|
||||||
@@ -33,6 +33,7 @@ namespace Camera
|
|||||||
private ConcurrentDictionary<int, Rectangle> _ledZones = new ConcurrentDictionary<int, Rectangle>();
|
private ConcurrentDictionary<int, Rectangle> _ledZones = new ConcurrentDictionary<int, Rectangle>();
|
||||||
private ConcurrentDictionary<int, Color> _ledZoneColors = new ConcurrentDictionary<int, Color>();
|
private ConcurrentDictionary<int, Color> _ledZoneColors = new ConcurrentDictionary<int, Color>();
|
||||||
private ConcurrentDictionary<int, string> _ledZoneDetectionResults = new ConcurrentDictionary<int, string>();
|
private ConcurrentDictionary<int, string> _ledZoneDetectionResults = new ConcurrentDictionary<int, string>();
|
||||||
|
private ConcurrentDictionary<int, Tuple<double, double, double>> _ledZoneHsvValues = new ConcurrentDictionary<int, Tuple<double, double, double>>();
|
||||||
private LedDetector _ledDetector = new LedDetector();
|
private LedDetector _ledDetector = new LedDetector();
|
||||||
|
|
||||||
public void SetLedDetectorParams(int brightLimit, int satLimit)
|
public void SetLedDetectorParams(int brightLimit, int satLimit)
|
||||||
@@ -434,6 +435,24 @@ namespace Camera
|
|||||||
_ledZoneDetectionResults[index] = result;
|
_ledZoneDetectionResults[index] = result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取所有LED区域的HSV值
|
||||||
|
/// </summary>
|
||||||
|
public ConcurrentDictionary<int, Tuple<double, double, double>> GetLedZoneHsvValues()
|
||||||
|
{
|
||||||
|
return _ledZoneHsvValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取指定索引的LED区域的HSV值
|
||||||
|
/// </summary>
|
||||||
|
public Tuple<double, double, double> GetLedZoneHsvValue(int index)
|
||||||
|
{
|
||||||
|
if (_ledZoneHsvValues.ContainsKey(index))
|
||||||
|
return _ledZoneHsvValues[index];
|
||||||
|
return new Tuple<double, double, double>(0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 保存配置
|
/// 保存配置
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -495,7 +514,6 @@ namespace Camera
|
|||||||
{
|
{
|
||||||
string line;
|
string line;
|
||||||
bool isDetectionZone = true;
|
bool isDetectionZone = true;
|
||||||
bool isReadingLedThresholds = false;
|
|
||||||
while ((line = reader.ReadLine()) != null)
|
while ((line = reader.ReadLine()) != null)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(line))
|
if (string.IsNullOrWhiteSpace(line))
|
||||||
@@ -677,6 +695,7 @@ namespace Camera
|
|||||||
result = "Off";
|
result = "Off";
|
||||||
}
|
}
|
||||||
_ledZoneDetectionResults[index] = result;
|
_ledZoneDetectionResults[index] = result;
|
||||||
|
_ledZoneHsvValues[index] = new Tuple<double, double, double>(detectResult.Item3, detectResult.Item4, detectResult.Item5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ public class LedDetector
|
|||||||
set { _satLimit = value; }
|
set { _satLimit = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public Tuple<LedState, LedColor> Detect(Image<Bgr, byte> image, Rectangle roi)
|
public Tuple<LedState, LedColor, double, double, double> Detect(Image<Bgr, byte> image, Rectangle roi)
|
||||||
{
|
{
|
||||||
using (Image<Bgr, byte> subImg = image.GetSubRect(roi))
|
using (Image<Bgr, byte> subImg = image.GetSubRect(roi))
|
||||||
using (Image<Hsv, byte> hsv = subImg.Convert<Hsv, byte>())
|
using (Image<Hsv, byte> hsv = subImg.Convert<Hsv, byte>())
|
||||||
@@ -41,12 +41,11 @@ public class LedDetector
|
|||||||
S.Dispose();
|
S.Dispose();
|
||||||
V.Dispose();
|
V.Dispose();
|
||||||
|
|
||||||
//bool isOn = avgV > _brightLimit;
|
|
||||||
bool isOn = avgV > _brightLimit && avgS > _satLimit;
|
bool isOn = avgV > _brightLimit && avgS > _satLimit;
|
||||||
|
|
||||||
if (!isOn)
|
if (!isOn)
|
||||||
{
|
{
|
||||||
return new Tuple<LedState, LedColor>(LedState.Off, LedColor.Unknown);
|
return new Tuple<LedState, LedColor, double, double, double>(LedState.Off, LedColor.Unknown, avgH, avgS, avgV);
|
||||||
}
|
}
|
||||||
|
|
||||||
LedColor color = LedColor.Unknown;
|
LedColor color = LedColor.Unknown;
|
||||||
@@ -57,7 +56,7 @@ public class LedDetector
|
|||||||
else if (avgH >= 90 && avgH < 130)
|
else if (avgH >= 90 && avgH < 130)
|
||||||
color = LedColor.Blue;
|
color = LedColor.Blue;
|
||||||
|
|
||||||
return new Tuple<LedState, LedColor>(LedState.On, color);
|
return new Tuple<LedState, LedColor, double, double, double>(LedState.On, color, avgH, avgS, avgV);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,9 @@ namespace Camera
|
|||||||
this.toolStripNumericUpDown3 = new ToolStripNumericUpDown();
|
this.toolStripNumericUpDown3 = new ToolStripNumericUpDown();
|
||||||
this.toolStripLabel4 = new System.Windows.Forms.ToolStripLabel();
|
this.toolStripLabel4 = new System.Windows.Forms.ToolStripLabel();
|
||||||
this.toolStripNumericUpDown4 = new ToolStripNumericUpDown();
|
this.toolStripNumericUpDown4 = new ToolStripNumericUpDown();
|
||||||
|
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
|
||||||
this.dataGridView1 = new System.Windows.Forms.DataGridView();
|
this.dataGridView1 = new System.Windows.Forms.DataGridView();
|
||||||
|
this.dataGridView2 = new System.Windows.Forms.DataGridView();
|
||||||
((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();
|
||||||
@@ -50,7 +52,12 @@ namespace Camera
|
|||||||
this.toolStrip2.SuspendLayout();
|
this.toolStrip2.SuspendLayout();
|
||||||
this.toolStrip3.SuspendLayout();
|
this.toolStrip3.SuspendLayout();
|
||||||
this.toolStripContainer1.SuspendLayout();
|
this.toolStripContainer1.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
|
||||||
|
this.splitContainer2.Panel1.SuspendLayout();
|
||||||
|
this.splitContainer2.Panel2.SuspendLayout();
|
||||||
|
this.splitContainer2.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// splitContainer1
|
// splitContainer1
|
||||||
@@ -58,6 +65,7 @@ namespace Camera
|
|||||||
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
|
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
|
||||||
this.splitContainer1.Name = "splitContainer1";
|
this.splitContainer1.Name = "splitContainer1";
|
||||||
|
this.splitContainer1.SplitterWidth = 5;
|
||||||
//
|
//
|
||||||
// splitContainer1.Panel1
|
// splitContainer1.Panel1
|
||||||
//
|
//
|
||||||
@@ -92,7 +100,6 @@ namespace Camera
|
|||||||
this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.toolStripContainer1.Location = new System.Drawing.Point(0, 0);
|
this.toolStripContainer1.Location = new System.Drawing.Point(0, 0);
|
||||||
this.toolStripContainer1.Name = "toolStripContainer1";
|
this.toolStripContainer1.Name = "toolStripContainer1";
|
||||||
this.toolStripContainer1.Size = new System.Drawing.Size(559, 515);
|
|
||||||
this.toolStripContainer1.TabIndex = 0;
|
this.toolStripContainer1.TabIndex = 0;
|
||||||
this.toolStripContainer1.Text = "toolStripContainer1";
|
this.toolStripContainer1.Text = "toolStripContainer1";
|
||||||
this.toolStripContainer1.TopToolStripPanel.Dock = System.Windows.Forms.DockStyle.Top;
|
this.toolStripContainer1.TopToolStripPanel.Dock = System.Windows.Forms.DockStyle.Top;
|
||||||
@@ -103,7 +110,7 @@ namespace Camera
|
|||||||
//
|
//
|
||||||
// toolStripContainer1.ContentPanel
|
// toolStripContainer1.ContentPanel
|
||||||
//
|
//
|
||||||
this.toolStripContainer1.ContentPanel.Controls.Add(this.dataGridView1);
|
this.toolStripContainer1.ContentPanel.Controls.Add(this.splitContainer2);
|
||||||
this.toolStripContainer1.ContentPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.toolStripContainer1.ContentPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
//
|
//
|
||||||
// toolStrip1
|
// toolStrip1
|
||||||
@@ -420,6 +427,7 @@ namespace Camera
|
|||||||
this.dataGridView1.AllowUserToResizeRows = false;
|
this.dataGridView1.AllowUserToResizeRows = false;
|
||||||
this.dataGridView1.ColumnHeadersHeight = 25;
|
this.dataGridView1.ColumnHeadersHeight = 25;
|
||||||
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
|
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
|
||||||
|
// this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
|
||||||
this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.dataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;
|
this.dataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;
|
||||||
this.dataGridView1.Location = new System.Drawing.Point(0, 0);
|
this.dataGridView1.Location = new System.Drawing.Point(0, 0);
|
||||||
@@ -427,10 +435,46 @@ namespace Camera
|
|||||||
this.dataGridView1.RowHeadersVisible = false;
|
this.dataGridView1.RowHeadersVisible = false;
|
||||||
this.dataGridView1.RowTemplate.Height = 25;
|
this.dataGridView1.RowTemplate.Height = 25;
|
||||||
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
|
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
|
||||||
this.dataGridView1.Size = new System.Drawing.Size(559, 254);
|
this.dataGridView1.Size = new System.Drawing.Size(600, 254);
|
||||||
this.dataGridView1.TabIndex = 0;
|
this.dataGridView1.TabIndex = 0;
|
||||||
this.dataGridView1.SelectionChanged += new System.EventHandler(this.DataGridView1_SelectionChanged);
|
this.dataGridView1.SelectionChanged += new System.EventHandler(this.DataGridView1_SelectionChanged);
|
||||||
//
|
//
|
||||||
|
// splitContainer2
|
||||||
|
//
|
||||||
|
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.splitContainer2.Name = "splitContainer2";
|
||||||
|
this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
|
||||||
|
this.splitContainer2.SplitterWidth = 5;
|
||||||
|
//
|
||||||
|
// splitContainer2.Panel1
|
||||||
|
//
|
||||||
|
this.splitContainer2.Panel1.Controls.Add(this.dataGridView1);
|
||||||
|
this.splitContainer2.Panel1MinSize = 50;
|
||||||
|
//
|
||||||
|
// splitContainer2.Panel2
|
||||||
|
//
|
||||||
|
this.splitContainer2.Panel2.Controls.Add(this.dataGridView2);
|
||||||
|
this.splitContainer2.Panel2MinSize = 50;
|
||||||
|
this.splitContainer2.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// dataGridView2
|
||||||
|
//
|
||||||
|
this.dataGridView2.AllowUserToAddRows = false;
|
||||||
|
this.dataGridView2.AllowUserToDeleteRows = false;
|
||||||
|
this.dataGridView2.AllowUserToResizeRows = false;
|
||||||
|
this.dataGridView2.Enabled = false;
|
||||||
|
this.dataGridView2.ColumnHeadersHeight = 25;
|
||||||
|
this.dataGridView2.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
|
||||||
|
this.dataGridView2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.dataGridView2.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;
|
||||||
|
this.dataGridView2.Name = "dataGridView2";
|
||||||
|
this.dataGridView2.ReadOnly = true;
|
||||||
|
this.dataGridView2.RowHeadersVisible = false;
|
||||||
|
this.dataGridView2.RowTemplate.Height = 25;
|
||||||
|
this.dataGridView2.Size = new System.Drawing.Size(600, 254);
|
||||||
|
this.dataGridView2.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
|
||||||
|
this.dataGridView2.TabIndex = 0;
|
||||||
|
//
|
||||||
// Setting
|
// Setting
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
|
||||||
@@ -455,7 +499,9 @@ namespace Camera
|
|||||||
this.toolStrip3.PerformLayout();
|
this.toolStrip3.PerformLayout();
|
||||||
this.toolStripContainer1.ResumeLayout(false);
|
this.toolStripContainer1.ResumeLayout(false);
|
||||||
this.toolStripContainer1.PerformLayout();
|
this.toolStripContainer1.PerformLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -486,5 +532,7 @@ namespace Camera
|
|||||||
private System.Windows.Forms.ToolStripLabel toolStripLabel6;
|
private System.Windows.Forms.ToolStripLabel toolStripLabel6;
|
||||||
private ToolStripNumericUpDown toolStripNumericUpDown6;
|
private ToolStripNumericUpDown toolStripNumericUpDown6;
|
||||||
private System.Windows.Forms.DataGridView dataGridView1;
|
private System.Windows.Forms.DataGridView dataGridView1;
|
||||||
|
private System.Windows.Forms.SplitContainer splitContainer2;
|
||||||
|
private System.Windows.Forms.DataGridView dataGridView2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -197,6 +197,19 @@ namespace Camera
|
|||||||
dataGridView1.Columns["Color"].Width = 70;
|
dataGridView1.Columns["Color"].Width = 70;
|
||||||
dataGridView1.Columns["Detection"].Width = 80;
|
dataGridView1.Columns["Detection"].Width = 80;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dataGridView2.Columns.Count == 0)
|
||||||
|
{
|
||||||
|
dataGridView2.Columns.Add("Index", "索引");
|
||||||
|
dataGridView2.Columns.Add("H", "H值");
|
||||||
|
dataGridView2.Columns.Add("S", "S值");
|
||||||
|
dataGridView2.Columns.Add("V", "V值");
|
||||||
|
|
||||||
|
dataGridView2.Columns["Index"].Width = 50;
|
||||||
|
dataGridView2.Columns["H"].Width = 80;
|
||||||
|
dataGridView2.Columns["S"].Width = 80;
|
||||||
|
dataGridView2.Columns["V"].Width = 80;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Setting_Load(object sender, EventArgs e)
|
private void Setting_Load(object sender, EventArgs e)
|
||||||
@@ -214,6 +227,11 @@ namespace Camera
|
|||||||
picBoxCamera.BackColor = Color.Gray;
|
picBoxCamera.BackColor = Color.Gray;
|
||||||
splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
|
splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
|
||||||
splitContainer1.SplitterDistance = splitContainer1.Width - splitContainer1.Panel2MinSize;
|
splitContainer1.SplitterDistance = splitContainer1.Width - splitContainer1.Panel2MinSize;
|
||||||
|
this.BeginInvoke(new Action(() =>
|
||||||
|
{
|
||||||
|
if (splitContainer2.Height > 0)
|
||||||
|
splitContainer2.SplitterDistance = splitContainer2.Height / 2;
|
||||||
|
}));
|
||||||
UpdateDataGridView();
|
UpdateDataGridView();
|
||||||
UpdateLedZoneButtonsVisibility(0);
|
UpdateLedZoneButtonsVisibility(0);
|
||||||
}
|
}
|
||||||
@@ -354,6 +372,7 @@ namespace Camera
|
|||||||
{
|
{
|
||||||
Rectangle detectionZone = _camera.GetDetectionZone();
|
Rectangle detectionZone = _camera.GetDetectionZone();
|
||||||
var allLedZones = _camera.GetLedZones();
|
var allLedZones = _camera.GetLedZones();
|
||||||
|
var hsvValues = _camera.GetLedZoneHsvValues();
|
||||||
foreach (var kvp in allLedZones)
|
foreach (var kvp in allLedZones)
|
||||||
{
|
{
|
||||||
int index = kvp.Key;
|
int index = kvp.Key;
|
||||||
@@ -366,6 +385,21 @@ namespace Camera
|
|||||||
dataGridView1.Rows.Add(index, ledZone.X, ledZone.Y, ledZone.Width, ledZone.Height, ColorTranslator.ToHtml(ledColor), detectionResult);
|
dataGridView1.Rows.Add(index, ledZone.X, ledZone.Y, ledZone.Width, ledZone.Height, ColorTranslator.ToHtml(ledColor), detectionResult);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dataGridView2.Rows.Clear();
|
||||||
|
foreach (var kvp in allLedZones)
|
||||||
|
{
|
||||||
|
int index = kvp.Key;
|
||||||
|
if (hsvValues.ContainsKey(index))
|
||||||
|
{
|
||||||
|
var hsv = hsvValues[index];
|
||||||
|
dataGridView2.Rows.Add(index, hsv.Item1.ToString("F1"), hsv.Item2.ToString("F1"), hsv.Item3.ToString("F1"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dataGridView2.Rows.Add(index, "0", "0", "0");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
picBoxCamera.Invalidate();
|
picBoxCamera.Invalidate();
|
||||||
_isUpdatingDataGridView = false;
|
_isUpdatingDataGridView = false;
|
||||||
@@ -396,6 +430,8 @@ namespace Camera
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UpdateHsvResults();
|
||||||
|
|
||||||
if (selectedIndex >= 0)
|
if (selectedIndex >= 0)
|
||||||
{
|
{
|
||||||
foreach (DataGridViewRow row in dataGridView1.Rows)
|
foreach (DataGridViewRow row in dataGridView1.Rows)
|
||||||
@@ -414,6 +450,59 @@ namespace Camera
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateHsvResults()
|
||||||
|
{
|
||||||
|
if (_camera == null || dataGridView2.Rows.Count == 0) return;
|
||||||
|
|
||||||
|
var allLedZones = _camera.GetLedZones();
|
||||||
|
var hsvValues = _camera.GetLedZoneHsvValues();
|
||||||
|
|
||||||
|
if (dataGridView2.Rows.Count != allLedZones.Count)
|
||||||
|
{
|
||||||
|
dataGridView2.Rows.Clear();
|
||||||
|
foreach (var kvp in allLedZones)
|
||||||
|
{
|
||||||
|
int index = kvp.Key;
|
||||||
|
if (hsvValues.ContainsKey(index))
|
||||||
|
{
|
||||||
|
var hsv = hsvValues[index];
|
||||||
|
dataGridView2.Rows.Add(index, hsv.Item1.ToString("F1"), hsv.Item2.ToString("F1"), hsv.Item3.ToString("F1"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dataGridView2.Rows.Add(index, "0", "0", "0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (DataGridViewRow row in dataGridView2.Rows)
|
||||||
|
{
|
||||||
|
int index = Convert.ToInt32(row.Cells["Index"].Value);
|
||||||
|
if (hsvValues.ContainsKey(index))
|
||||||
|
{
|
||||||
|
var hsv = hsvValues[index];
|
||||||
|
row.Cells["H"].Value = hsv.Item1.ToString("F1");
|
||||||
|
row.Cells["S"].Value = hsv.Item2.ToString("F1");
|
||||||
|
row.Cells["V"].Value = hsv.Item3.ToString("F1");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dataGridView1.SelectedRows.Count > 0)
|
||||||
|
{
|
||||||
|
int selectedIndex = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Index"].Value);
|
||||||
|
foreach (DataGridViewRow row in dataGridView2.Rows)
|
||||||
|
{
|
||||||
|
if (Convert.ToInt32(row.Cells["Index"].Value) == selectedIndex)
|
||||||
|
{
|
||||||
|
row.Selected = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void PicBoxCamera_Paint(object sender, PaintEventArgs e)
|
private void PicBoxCamera_Paint(object sender, PaintEventArgs e)
|
||||||
{
|
{
|
||||||
Image currentImage = null;
|
Image currentImage = null;
|
||||||
@@ -1199,6 +1288,14 @@ namespace Camera
|
|||||||
toolStripNumericUpDown3.Value = zone.Width;
|
toolStripNumericUpDown3.Value = zone.Width;
|
||||||
toolStripNumericUpDown4.Value = zone.Height;
|
toolStripNumericUpDown4.Value = zone.Height;
|
||||||
}
|
}
|
||||||
|
foreach (DataGridViewRow row in dataGridView2.Rows)
|
||||||
|
{
|
||||||
|
if (Convert.ToInt32(row.Cells["Index"].Value) == newSelectedZoneIndex)
|
||||||
|
{
|
||||||
|
row.Selected = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
picBoxCamera.Invalidate();
|
picBoxCamera.Invalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user