获取图像成功

This commit is contained in:
zqm
2026-03-24 17:25:04 +08:00
parent d1eae0f0ae
commit e1cf0ad723
3 changed files with 327 additions and 211 deletions

View File

@@ -5,6 +5,7 @@ using System.Net;
using System.IO;
using System.Security.Cryptography;
using System.Text.RegularExpressions;
using System.Threading;
namespace Camera
{
@@ -16,11 +17,21 @@ namespace Camera
private const string USER = "admin";
private const string PASSWD = "Yexian.net.168";
// 配置文件目录
private string _configPath;
// 配置数据
private Rectangle _detectionZone;
private Rectangle _ledZone;
// 定时器
private System.Timers.Timer _timer;
// 当前图像
private Image _currentImage;
private readonly object _imageLock = new object();
private string _authorization;
// 事件定义
public event EventHandler<ImageEventArgs> ImageCaptured;
@@ -49,9 +60,12 @@ namespace Camera
/// 获取当前图像
/// </summary>
public Image GetCurrentImage()
{
lock (_imageLock)
{
return _currentImage;
}
}
/// <summary>
/// 开始获取图像
@@ -60,7 +74,7 @@ namespace Camera
{
Stop();
_timer = new System.Timers.Timer(300);
_timer = new System.Timers.Timer(200);
_timer.AutoReset = false;
_timer.Elapsed += Timer_Elapsed;
_timer.Start();
@@ -77,6 +91,7 @@ namespace Camera
_timer.Dispose();
_timer = null;
}
_authorization = null;
}
/// <summary>
@@ -89,35 +104,188 @@ namespace Camera
{
settingForm.SetImage(_currentImage);
}
if (!string.IsNullOrEmpty(_configPath))
{
settingForm.SetConfigPath(_configPath);
}
settingForm.ShowDialog();
}
/// <summary>
/// 设置配置文件目录
/// </summary>
public void SetConfigPath(string path)
{
_configPath = path;
LoadConfig();
}
/// <summary>
/// 获取检测区域
/// </summary>
public Rectangle GetDetectionZone()
{
return _detectionZone;
}
/// <summary>
/// 获取Led区域
/// </summary>
public Rectangle GetLedZone()
{
return _ledZone;
}
/// <summary>
/// 设置检测区域
/// </summary>
public void SetDetectionZone(Rectangle zone)
{
_detectionZone = zone;
}
/// <summary>
/// 设置Led区域
/// </summary>
public void SetLedZone(Rectangle zone)
{
_ledZone = zone;
}
/// <summary>
/// 保存配置
/// </summary>
public void SaveConfig()
{
if (string.IsNullOrEmpty(_configPath)) return;
string configFile = Path.Combine(_configPath, "Camera.csv");
try
{
using (StreamWriter writer = new StreamWriter(configFile, false, System.Text.Encoding.UTF8))
{
writer.WriteLine("X坐标,Y坐标,宽度,高度,颜色");
if (_detectionZone.Width > 0 && _detectionZone.Height > 0)
{
writer.WriteLine(string.Format("{0},{1},{2},{3},#FF0000", _detectionZone.X, _detectionZone.Y, _detectionZone.Width, _detectionZone.Height));
}
writer.WriteLine();
writer.WriteLine("索引,X坐标,Y坐标,宽度,高度,颜色");
if (_ledZone.Width > 0 && _ledZone.Height > 0)
{
writer.WriteLine(string.Format("1,{0},{1},{2},{3},#00FF00", _ledZone.X, _ledZone.Y, _ledZone.Width, _ledZone.Height));
}
}
}
catch { }
}
/// <summary>
/// 加载配置
/// </summary>
private void LoadConfig()
{
if (string.IsNullOrEmpty(_configPath)) return;
_detectionZone = new Rectangle(0, 0, 2880, 1620);
_ledZone = new Rectangle(0, 0, 0, 0);
string configFile = Path.Combine(_configPath, "Camera.csv");
try
{
if (File.Exists(configFile))
{
using (StreamReader reader = new StreamReader(configFile, System.Text.Encoding.UTF8))
{
string line;
bool isDetectionZone = true;
while ((line = reader.ReadLine()) != null)
{
if (string.IsNullOrWhiteSpace(line))
{
isDetectionZone = false;
continue;
}
string[] parts = line.Split(',');
if (parts.Length >= 4)
{
if (isDetectionZone)
{
int x = int.Parse(parts[0]);
int y = int.Parse(parts[1]);
int width = int.Parse(parts[2]);
int height = int.Parse(parts[3]);
_detectionZone = new Rectangle(x, y, width, height);
}
else if (parts[0] == "索引")
{
continue;
}
else
{
int index = int.Parse(parts[0]);
if (index == 1)
{
int x = int.Parse(parts[1]);
int y = int.Parse(parts[2]);
int width = int.Parse(parts[3]);
int height = int.Parse(parts[4]);
_ledZone = new Rectangle(x, y, width, height);
}
}
}
}
}
}
else
{
SaveConfig();
}
}
catch { }
}
/// <summary>
/// 定时器触发事件
/// </summary>
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
System.Diagnostics.Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " Timer_Elapsed 开始");
try
{
Image image = GetCameraImage();
if (image != null)
{
if (_currentImage != null)
System.Diagnostics.Debug.WriteLine("Camera: 捕获图像 Size=" + image.Width + "x" + image.Height);
Image oldImage = null;
lock (_imageLock)
{
_currentImage.Dispose();
}
oldImage = _currentImage;
_currentImage = image;
}
if (oldImage != null)
{
oldImage.Dispose();
}
OnImageCaptured(new ImageEventArgs { Image = image });
System.Diagnostics.Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 事件已触发");
}
}
catch (Exception ex)
{
Console.WriteLine("获取图像失败: " + ex.Message);
System.Diagnostics.Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 获取图像失败: " + ex.Message);
}
finally
{
if (_timer != null && _timer.Enabled == false)
if (_timer != null)
{
System.Diagnostics.Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 重新启动定时器");
_timer.Stop();
_timer.Start();
}
}
@@ -132,6 +300,13 @@ namespace Camera
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.Headers.Add("Cache-Control", "no-cache");
request.Headers.Add("Pragma", "no-cache");
if (!string.IsNullOrEmpty(_authorization))
{
request.Headers.Add("Authorization", _authorization);
}
HttpWebResponse response = null;
try
@@ -149,11 +324,13 @@ namespace Camera
string realm = ExtractAuthParam(authHeader, "realm");
string nonce = ExtractAuthParam(authHeader, "nonce");
string authorization = GenerateDigestAuthorization(USER, PASSWD, realm, nonce, "GET", SNAPSHOT_URI);
_authorization = GenerateDigestAuthorization(USER, PASSWD, realm, nonce, "GET", SNAPSHOT_URI);
request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.Headers.Add("Authorization", authorization);
request.Headers.Add("Authorization", _authorization);
request.Headers.Add("Cache-Control", "no-cache");
request.Headers.Add("Pragma", "no-cache");
response = (HttpWebResponse)request.GetResponse();
}
else
@@ -162,12 +339,15 @@ namespace Camera
}
}
byte[] imageData;
using (Stream stream = response.GetResponseStream())
using (MemoryStream memoryStream = new MemoryStream())
{
Image image = Image.FromStream(stream);
response.Close();
return image;
stream.CopyTo(memoryStream);
imageData = memoryStream.ToArray();
}
return new Bitmap(new MemoryStream(imageData));
}
/// <summary>

View File

@@ -23,7 +23,7 @@ namespace Camera
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.listBox1 = new System.Windows.Forms.ListBox();
this.dataGridView1 = new System.Windows.Forms.DataGridView();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
@@ -32,6 +32,7 @@ namespace Camera
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
this.splitContainer2.Panel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
this.splitContainer2.SuspendLayout();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
@@ -50,9 +51,9 @@ namespace Camera
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);
this.splitContainer1.Panel2MinSize = 200;
this.splitContainer1.Size = new System.Drawing.Size(850, 469);
this.splitContainer1.SplitterDistance = 100;
this.splitContainer1.Panel2MinSize = 457;
this.splitContainer1.Size = new System.Drawing.Size(1263, 515);
this.splitContainer1.SplitterDistance = 700;
this.splitContainer1.TabIndex = 0;
//
// picBoxCamera
@@ -85,7 +86,7 @@ namespace Camera
//
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.listBox1);
this.splitContainer2.Panel2.Controls.Add(this.dataGridView1);
this.splitContainer2.Panel2MinSize = 100;
this.splitContainer2.Size = new System.Drawing.Size(746, 469);
this.splitContainer2.TabIndex = 0;
@@ -95,46 +96,45 @@ namespace Camera
this.toolStrip1.Dock = System.Windows.Forms.DockStyle.Fill;
this.toolStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripButton2,
this.toolStripButton1});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(746, 50);
this.toolStrip1.TabIndex = 0;
this.toolStrip1.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.toolStrip1_ItemClicked);
//
// toolStripButton2
//
this.toolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripButton2.Name = "toolStripButton2";
this.toolStripButton2.Size = new System.Drawing.Size(43, 47);
this.toolStripButton2.Text = "新建";
this.toolStripButton2.Click += new System.EventHandler(this.ToolStripButton2_Click);
//
// toolStripButton1
//
this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripButton1.Font = new System.Drawing.Font("Microsoft YaHei UI", 9F, System.Drawing.FontStyle.Bold);
this.toolStripButton1.ForeColor = System.Drawing.Color.Blue;
this.toolStripButton1.Name = "toolStripButton1";
this.toolStripButton1.Size = new System.Drawing.Size(43, 47);
this.toolStripButton1.Text = "保存";
this.toolStripButton1.Text = "修改检测区";
this.toolStripButton1.CheckOnClick = true;
this.toolStripButton1.Click += new System.EventHandler(this.ToolStripButton1_Click);
//
// listBox1
// dataGridView1
//
this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.listBox1.FormattingEnabled = true;
this.listBox1.ItemHeight = 15;
this.listBox1.Location = new System.Drawing.Point(0, 0);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(746, 415);
this.listBox1.TabIndex = 0;
this.listBox1.SelectedIndexChanged += new System.EventHandler(this.ListBox1_SelectedIndexChanged);
this.dataGridView1.AllowUserToAddRows = false;
this.dataGridView1.AllowUserToDeleteRows = false;
this.dataGridView1.AllowUserToResizeRows = false;
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
this.dataGridView1.ColumnHeadersHeight = 25;
this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.dataGridView1.Location = new System.Drawing.Point(0, 0);
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.ReadOnly = true;
this.dataGridView1.RowHeadersVisible = false;
this.dataGridView1.RowTemplate.Height = 25;
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridView1.Size = new System.Drawing.Size(746, 415);
this.dataGridView1.TabIndex = 0;
this.dataGridView1.SelectionChanged += new System.EventHandler(this.DataGridView1_SelectionChanged);
//
// Setting
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(905, 515);
this.ClientSize = new System.Drawing.Size(1263, 515);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Controls.Add(this.splitContainer1);
this.Name = "Setting";
@@ -149,6 +149,7 @@ namespace Camera
this.splitContainer2.Panel1.PerformLayout();
this.splitContainer2.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
this.splitContainer2.ResumeLayout(false);
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
@@ -164,6 +165,6 @@ namespace Camera
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton toolStripButton1;
private System.Windows.Forms.ToolStripButton toolStripButton2;
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.DataGridView dataGridView1;
}
}

View File

@@ -13,20 +13,21 @@ namespace Camera
public partial class Setting : Form
{
private Camera _camera;
private Rectangle _detectionZone;
private Rectangle _ledZone;
private int _selectedZoneIndex = -1;
private bool _isDrawing = false;
private bool _isMoving = false;
private Point _startPoint;
private Rectangle _originalZone;
private Color[] _zoneColors = new Color[] { Color.Red, Color.Green, Color.Blue, Color.Yellow, Color.Cyan, Color.Magenta };
public Setting()
{
InitializeComponent();
InitializeDataGridView();
}
public void SetCamera(Camera camera)
{
_camera = camera;
}
public void SetImage(Image image)
@@ -36,129 +37,64 @@ namespace Camera
picBoxCamera.Image.Dispose();
}
picBoxCamera.Image = (Image)image.Clone();
_detectionZone = new Rectangle(0, 0, picBoxCamera.Image.Width, picBoxCamera.Image.Height);
_ledZone = new Rectangle(0, 0, 50, 50);
LoadConfig();
picBoxCamera.Invalidate();
}
public void SetConfigPath(string path)
{
_camera.SetConfigPath(path);
}
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", "颜色");
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)
{
_camera = new Camera();
picBoxCamera.BackColor = Color.Gray;
splitContainer1.Panel2MinSize = 200;
splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
splitContainer1.SplitterDistance = splitContainer1.Width - 200;
splitContainer1.Panel2MinSize = 380;
splitContainer1.SplitterDistance = splitContainer1.Width - 380;
splitContainer2.Panel1MinSize = 40;
UpdateDataGridView();
}
private void LoadConfig()
private void UpdateDataGridView()
{
string configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Camera.csv");
if (File.Exists(configPath))
{
try
{
_detectionZone = new Rectangle(0, 0, 0, 0);
_ledZone = new Rectangle(0, 0, 0, 0);
dataGridView1.Rows.Clear();
using (StreamReader reader = new StreamReader(configPath, Encoding.UTF8))
if (_camera != null)
{
string line;
bool isFirstLine = true;
while ((line = reader.ReadLine()) != null)
Rectangle detectionZone = _camera.GetDetectionZone();
Rectangle ledZone = _camera.GetLedZone();
if (detectionZone.Width > 0 && detectionZone.Height > 0)
{
if (isFirstLine)
{
isFirstLine = false;
continue;
dataGridView1.Rows.Add(0, detectionZone.X, detectionZone.Y, detectionZone.Width, detectionZone.Height, "#FF0000");
}
string[] parts = line.Split(',');
if (parts.Length >= 5)
if (ledZone.Width > 0 && ledZone.Height > 0)
{
int index = int.Parse(parts[0]);
int x = int.Parse(parts[1]);
int y = int.Parse(parts[2]);
int width = int.Parse(parts[3]);
int height = int.Parse(parts[4]);
Color color = parts.Length > 5 ? ColorTranslator.FromHtml(parts[5]) : Color.Red;
Rectangle zone = new Rectangle(x, y, width, height);
if (index == 0)
{
_detectionZone = zone;
}
else if (index == 1)
{
_ledZone = zone;
}
}
dataGridView1.Rows.Add(1, ledZone.X, ledZone.Y, ledZone.Width, ledZone.Height, "#00FF00");
}
}
UpdateListBox();
picBoxCamera.Invalidate();
}
catch (Exception ex)
{
MessageBox.Show("加载配置失败: " + ex.Message);
}
}
else
{
if (picBoxCamera.Image != null)
{
_detectionZone = new Rectangle(10, 10, picBoxCamera.Image.Width - 20, picBoxCamera.Image.Height - 20);
_ledZone = new Rectangle(picBoxCamera.Image.Width - 60, 10, 50, 50);
}
UpdateListBox();
}
}
private void SaveConfig()
{
string configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Camera.csv");
try
{
using (StreamWriter writer = new StreamWriter(configPath, false, Encoding.UTF8))
{
writer.WriteLine("索引,X坐标,Y坐标,宽度,高度,颜色");
if (_detectionZone.Width > 0 && _detectionZone.Height > 0)
{
writer.WriteLine(string.Format("0,{0},{1},{2},{3},#FF0000", _detectionZone.X, _detectionZone.Y, _detectionZone.Width, _detectionZone.Height));
}
if (_ledZone.Width > 0 && _ledZone.Height > 0)
{
writer.WriteLine(string.Format("1,{0},{1},{2},{3},#00FF00", _ledZone.X, _ledZone.Y, _ledZone.Width, _ledZone.Height));
}
}
MessageBox.Show("配置已保存到: " + configPath);
}
catch (Exception ex)
{
MessageBox.Show("保存配置失败: " + ex.Message);
}
}
private void UpdateListBox()
{
listBox1.Items.Clear();
if (_detectionZone.Width > 0 && _detectionZone.Height > 0)
{
listBox1.Items.Add(string.Format("检测区: X={0}, Y={1}, W={2}, H={3}", _detectionZone.X, _detectionZone.Y, _detectionZone.Width, _detectionZone.Height));
}
if (_ledZone.Width > 0 && _ledZone.Height > 0)
{
listBox1.Items.Add(string.Format("Led区: X={0}, Y={1}, W={2}, H={3}", _ledZone.X, _ledZone.Y, _ledZone.Width, _ledZone.Height));
}
}
private void PicBoxCamera_Paint(object sender, PaintEventArgs e)
{
@@ -169,18 +105,21 @@ namespace Camera
float scaleX = (float)picBoxCamera.ClientSize.Width / picBoxCamera.Image.Width;
float scaleY = (float)picBoxCamera.ClientSize.Height / picBoxCamera.Image.Height;
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(
(int)(_detectionZone.X * scaleX),
(int)(_detectionZone.Y * scaleY),
(int)(_detectionZone.Width * scaleX),
(int)(_detectionZone.Height * scaleY)
(int)(detectionZone.X * scaleX),
(int)(detectionZone.Y * scaleY),
(int)(detectionZone.Width * scaleX),
(int)(detectionZone.Height * scaleY)
);
Rectangle scaledLedZone = new Rectangle(
(int)(_ledZone.X * scaleX),
(int)(_ledZone.Y * scaleY),
(int)(_ledZone.Width * scaleX),
(int)(_ledZone.Height * scaleY)
(int)(ledZone.X * scaleX),
(int)(ledZone.Y * scaleY),
(int)(ledZone.Width * scaleX),
(int)(ledZone.Height * scaleY)
);
using (Pen pen = new Pen(Color.Red, 2))
@@ -213,7 +152,6 @@ namespace Camera
{
int handleSize = 8;
using (Brush brush = new SolidBrush(Color.White))
using (Pen pen = new Pen(Color.Blue, 2))
{
g.FillRectangle(brush, rect.X - handleSize / 2, rect.Y - handleSize / 2, handleSize, handleSize);
g.FillRectangle(brush, rect.X + rect.Width - handleSize / 2, rect.Y - handleSize / 2, handleSize, handleSize);
@@ -224,25 +162,28 @@ namespace Camera
private void PicBoxCamera_MouseDown(object sender, MouseEventArgs e)
{
if (picBoxCamera.Image == null) return;
if (picBoxCamera.Image == null || _camera == null) return;
float scaleX = (float)picBoxCamera.Image.Width / picBoxCamera.ClientSize.Width;
float scaleY = (float)picBoxCamera.Image.Height / picBoxCamera.ClientSize.Height;
Point imagePoint = new Point((int)(e.X * scaleX), (int)(e.Y * scaleY));
if (_detectionZone.Contains(imagePoint))
Rectangle detectionZone = _camera.GetDetectionZone();
Rectangle ledZone = _camera.GetLedZone();
if (detectionZone.Contains(imagePoint))
{
_selectedZoneIndex = 0;
_isMoving = true;
_startPoint = imagePoint;
_originalZone = _detectionZone;
_originalZone = detectionZone;
}
else if (_ledZone.Contains(imagePoint))
else if (ledZone.Contains(imagePoint))
{
_selectedZoneIndex = 1;
_isMoving = true;
_startPoint = imagePoint;
_originalZone = _ledZone;
_originalZone = ledZone;
}
else
{
@@ -251,20 +192,18 @@ namespace Camera
_startPoint = imagePoint;
}
UpdateListBox();
UpdateDataGridView();
picBoxCamera.Invalidate();
}
private void PicBoxCamera_MouseMove(object sender, MouseEventArgs e)
{
if (picBoxCamera.Image == null) return;
if (picBoxCamera.Image == null || _camera == null || !_isMoving) return;
float scaleX = (float)picBoxCamera.Image.Width / picBoxCamera.ClientSize.Width;
float scaleY = (float)picBoxCamera.Image.Height / picBoxCamera.ClientSize.Height;
Point imagePoint = new Point((int)(e.X * scaleX), (int)(e.Y * scaleY));
if (_isMoving && _selectedZoneIndex >= 0)
{
int dx = imagePoint.X - _startPoint.X;
int dy = imagePoint.Y - _startPoint.Y;
@@ -281,22 +220,21 @@ namespace Camera
{
if (_selectedZoneIndex == 0)
{
_detectionZone = newZone;
_camera.SetDetectionZone(newZone);
}
else if (_selectedZoneIndex == 1)
{
_ledZone = newZone;
_camera.SetLedZone(newZone);
}
}
UpdateListBox();
UpdateDataGridView();
picBoxCamera.Invalidate();
}
}
private void PicBoxCamera_MouseUp(object sender, MouseEventArgs e)
{
if (picBoxCamera.Image == null) return;
if (picBoxCamera.Image == null || _camera == null) return;
float scaleX = (float)picBoxCamera.Image.Width / picBoxCamera.ClientSize.Width;
float scaleY = (float)picBoxCamera.Image.Height / picBoxCamera.ClientSize.Height;
@@ -311,41 +249,38 @@ namespace Camera
if (width > 10 && height > 10)
{
_detectionZone = new Rectangle(x, y, width, height);
_camera.SetDetectionZone(new Rectangle(x, y, width, height));
_selectedZoneIndex = 0;
}
}
_isDrawing = false;
_isMoving = false;
UpdateListBox();
UpdateDataGridView();
picBoxCamera.Invalidate();
}
private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
private void DataGridView1_SelectionChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex >= 0)
if (dataGridView1.SelectedRows.Count > 0)
{
_selectedZoneIndex = listBox1.SelectedIndex;
_selectedZoneIndex = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Index"].Value);
picBoxCamera.Invalidate();
}
}
private void ToolStripButton1_Click(object sender, EventArgs e)
{
SaveConfig();
if (toolStripButton1.Checked)
{
_selectedZoneIndex = 0;
}
private void ToolStripButton2_Click(object sender, EventArgs e)
else
{
if (picBoxCamera.Image != null)
{
_detectionZone = new Rectangle(10, 10, picBoxCamera.Image.Width - 20, picBoxCamera.Image.Height - 20);
_ledZone = new Rectangle(picBoxCamera.Image.Width - 60, 10, 50, 50);
_selectedZoneIndex = -1;
UpdateListBox();
picBoxCamera.Invalidate();
}
UpdateDataGridView();
picBoxCamera.Invalidate();
}
private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)