diff --git a/Windows/CS/Framework4.0/Camera/Camera/Camera.cs b/Windows/CS/Framework4.0/Camera/Camera/Camera.cs index c4e127c..3fb1554 100644 --- a/Windows/CS/Framework4.0/Camera/Camera/Camera.cs +++ b/Windows/CS/Framework4.0/Camera/Camera/Camera.cs @@ -207,6 +207,8 @@ namespace Camera /// public void AddLedZone(int index, Rectangle zone, Color color) { + // 裁截LED区域,确保在图像范围内 + zone = ClipZone(zone); _ledZones[index] = zone; _ledZoneColors[index] = color; } @@ -218,10 +220,35 @@ namespace Camera { if (_ledZones.ContainsKey(index)) { + // 裁截LED区域,确保在图像范围内 + zone = ClipZone(zone); _ledZones[index] = zone; } } + /// + /// 裁截区域,确保在图像范围内 + /// + private Rectangle ClipZone(Rectangle zone) + { + if (_currentImage == null) return zone; + + int imageWidth = _currentImage.Width; + int imageHeight = _currentImage.Height; + + // 确保坐标和尺寸在图像范围内 + int x = Math.Max(0, zone.X); + int y = Math.Max(0, zone.Y); + int width = Math.Min(zone.Width, imageWidth - x); + int height = Math.Min(zone.Height, imageHeight - y); + + // 确保宽度和高度为正数 + width = Math.Max(1, width); + height = Math.Max(1, height); + + return new Rectangle(x, y, width, height); + } + /// /// 移除Led区域 /// diff --git a/Windows/CS/Framework4.0/Camera/Camera/Setting.Designer.cs b/Windows/CS/Framework4.0/Camera/Camera/Setting.Designer.cs index 91b1fc7..4cb6fda 100644 --- a/Windows/CS/Framework4.0/Camera/Camera/Setting.Designer.cs +++ b/Windows/CS/Framework4.0/Camera/Camera/Setting.Designer.cs @@ -69,6 +69,7 @@ namespace Camera 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); this.picBoxCamera.Paint += new System.Windows.Forms.PaintEventHandler(this.PicBoxCamera_Paint); this.picBoxCamera.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PicBoxCamera_MouseDown); this.picBoxCamera.MouseMove += new System.Windows.Forms.MouseEventHandler(this.PicBoxCamera_MouseMove); diff --git a/Windows/CS/Framework4.0/Camera/Camera/Setting.cs b/Windows/CS/Framework4.0/Camera/Camera/Setting.cs index b286656..7402e99 100644 --- a/Windows/CS/Framework4.0/Camera/Camera/Setting.cs +++ b/Windows/CS/Framework4.0/Camera/Camera/Setting.cs @@ -53,12 +53,8 @@ namespace Camera { picBoxCamera.Image.Dispose(); } - Bitmap newImage = new Bitmap(image.Width, image.Height); - using (Graphics g = Graphics.FromImage(newImage)) - { - g.DrawImage(image, 0, 0); - } - picBoxCamera.Image = newImage; + // 不设置picBoxCamera.Image,避免双重绘制 + // 只在Paint事件中绘制缩放后的图像 picBoxCamera.Invalidate(); } catch { } @@ -225,12 +221,9 @@ namespace Camera { picBoxCamera.Image.Dispose(); } - Bitmap newImage = new Bitmap(image.Width, image.Height); - using (Graphics g = Graphics.FromImage(newImage)) - { - g.DrawImage(image, 0, 0); - } - picBoxCamera.Image = newImage; + // 不设置picBoxCamera.Image,避免双重绘制 + // 只在Paint事件中绘制缩放后的图像 + picBoxCamera.Invalidate(); } catch { } } @@ -263,7 +256,8 @@ namespace Camera Image currentImage = null; try { - currentImage = picBoxCamera.Image; + // 从Camera获取当前图像 + currentImage = _camera != null ? _camera.GetCurrentImage() : null; if (currentImage == null) return; } catch @@ -293,6 +287,7 @@ namespace Camera g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; + // 绘制缩放后的图像 Rectangle destRect = new Rectangle(0, 0, picBoxCamera.ClientSize.Width, picBoxCamera.ClientSize.Height); g.DrawImage(currentImage, destRect, 0, 0, currentImage.Width, currentImage.Height, GraphicsUnit.Pixel); @@ -514,7 +509,13 @@ namespace Camera private void PicBoxCamera_MouseDown(object sender, MouseEventArgs e) { - Image currentImage = picBoxCamera.Image; + // 处理右键点击 + if (e.Button == MouseButtons.Right) + { + return; // 右键点击由MouseUp事件处理 + } + + Image currentImage = _camera != null ? _camera.GetCurrentImage() : null; if (currentImage == null || _camera == null) return; int imageWidth, imageHeight; @@ -635,8 +636,10 @@ namespace Camera _isEditingLedZone = false; } _isDrawing = true; + _isDrawingLedMode = true; // 确保处于LED绘制模式 _startPoint = imagePoint; _resizeStartPoint = controlPoint; + toolStripButton2.Checked = true; // 保持LED编辑按钮按下状态 UpdateLedZoneButtonsVisibility(2); } } @@ -665,7 +668,7 @@ namespace Camera private void PicBoxCamera_MouseMove(object sender, MouseEventArgs e) { _currentMousePoint = e.Location; - Image currentImage = picBoxCamera.Image; + Image currentImage = _camera != null ? _camera.GetCurrentImage() : null; if (currentImage == null || _camera == null) return; int imageWidth, imageHeight; @@ -835,7 +838,7 @@ namespace Camera picBoxCamera.Invalidate(); return; } - if (_isDrawingLedMode || _isEditingLedZone) + if (_isDrawingLedMode || _isEditingLedZone || _isDrawing) { _isDrawingLedMode = false; _isEditingLedZone = false; @@ -853,7 +856,7 @@ namespace Camera } } - Image currentImage = picBoxCamera.Image; + Image currentImage = _camera != null ? _camera.GetCurrentImage() : null; if (currentImage == null || _camera == null) return; int imageWidth, imageHeight; @@ -1162,6 +1165,11 @@ namespace Camera } } + private void PicBoxCamera_SizeChanged(object sender, EventArgs e) + { + picBoxCamera.Invalidate(); + } + private void UpdateColorButtonIcon() { Color currentColor;