From 44c593941f21c28cb0c8c17382a1c5e1ddb239fa Mon Sep 17 00:00:00 2001 From: zqm Date: Thu, 8 Jan 2026 09:39:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=94=BE=E5=A4=A7=E9=A2=84?= =?UTF-8?q?=E8=A7=88=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CS/Framework4.0/Toprie/Toprie/Camera.cs | 51 ++++++-- .../Toprie/Toprie/preview.Designer.cs | 68 ++++++++++ .../CS/Framework4.0/Toprie/Toprie/preview.cs | 73 +++++++++++ .../Framework4.0/Toprie/Toprie/preview.resx | 120 ++++++++++++++++++ 4 files changed, 300 insertions(+), 12 deletions(-) create mode 100644 Windows/CS/Framework4.0/Toprie/Toprie/preview.Designer.cs create mode 100644 Windows/CS/Framework4.0/Toprie/Toprie/preview.cs create mode 100644 Windows/CS/Framework4.0/Toprie/Toprie/preview.resx diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs index 5ab43b0..41dc8f8 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs @@ -53,6 +53,9 @@ namespace JoyD.Windows.CS.Toprie private System.Windows.Forms.ToolStripMenuItem modifyConfigToolStripMenuItem; private const int BUFFER_HEIGHT = 384; + // 预览窗口引用 + private JoyD.Windows.CS.preview _previewForm; + // 最后接收的图像 private Image _lastImage = null; @@ -1131,7 +1134,11 @@ namespace JoyD.Windows.CS.Toprie // 将全局缓冲一次性绘制到图像框的bitmap imageBox.Image = tempImage; - + // 通知预览窗口更新图像 + if (_previewForm != null && !_previewForm.IsDisposed) + { + _previewForm.UpdateImage(tempImage); + } // 步骤5:同步更新检测配置窗口的实时图像属性 // 创建LastImage的副本并通过UpdateRealTimeImage方法传递给Setting窗口 lock (_lastImageLock) @@ -3199,9 +3206,39 @@ namespace JoyD.Windows.CS.Toprie /// /// imageBox双击事件处理方法 - /// 双击后弹出检测配置窗口 + /// 双击后弹出预览窗口 /// private void ImageBox_DoubleClick(object sender, EventArgs e) + { + try + { + // 关闭已存在的预览窗口 + if (_previewForm != null && !_previewForm.IsDisposed) + { + _previewForm.Close(); + } + + // 创建新的预览窗口实例 + _previewForm = new JoyD.Windows.CS.preview(); + // 设置初始图像 + _previewForm.UpdateImage(_lastImage); + // 模态显示预览窗口 + _previewForm.ShowDialog(); + // 预览窗口关闭后清空引用 + _previewForm = null; + } + catch (Exception ex) + { + Console.WriteLine($"打开预览窗口时出错: {ex.Message}"); + MessageBox.Show($"打开预览窗口时出错: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// "修改配置"菜单项点击事件处理方法 + /// 点击后弹出检测配置窗口 + /// + private void ModifyConfigToolStripMenuItem_Click(object sender, EventArgs e) { try { @@ -3216,15 +3253,5 @@ namespace JoyD.Windows.CS.Toprie MessageBox.Show($"打开配置窗口时出错: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } - - /// - /// "修改配置"菜单项点击事件处理方法 - /// 点击后弹出检测配置窗口,与双击效果相同 - /// - private void ModifyConfigToolStripMenuItem_Click(object sender, EventArgs e) - { - // 调用与双击相同的逻辑 - ImageBox_DoubleClick(sender, e); - } } } \ No newline at end of file diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/preview.Designer.cs b/Windows/CS/Framework4.0/Toprie/Toprie/preview.Designer.cs new file mode 100644 index 0000000..863de51 --- /dev/null +++ b/Windows/CS/Framework4.0/Toprie/Toprie/preview.Designer.cs @@ -0,0 +1,68 @@ +namespace JoyD.Windows.CS +{ + partial class preview + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 预览图像控件 + /// + private System.Windows.Forms.PictureBox previewImageBox; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.previewImageBox = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.previewImageBox)).BeginInit(); + this.SuspendLayout(); + // + // previewImageBox + // + this.previewImageBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.previewImageBox.Location = new System.Drawing.Point(0, 0); + this.previewImageBox.Name = "previewImageBox"; + this.previewImageBox.Size = new System.Drawing.Size(973, 708); + this.previewImageBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.previewImageBox.TabIndex = 0; + this.previewImageBox.TabStop = false; + // + // preview + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(973, 708); + this.Controls.Add(this.previewImageBox); + this.MinimizeBox = false; + this.Name = "preview"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "预览"; + ((System.ComponentModel.ISupportInitialize)(this.previewImageBox)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/preview.cs b/Windows/CS/Framework4.0/Toprie/Toprie/preview.cs new file mode 100644 index 0000000..84fc221 --- /dev/null +++ b/Windows/CS/Framework4.0/Toprie/Toprie/preview.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace JoyD.Windows.CS +{ + /// + /// 预览窗口类,用于显示图像或数据预览 + /// + public partial class preview : Form + { + /// + /// 初始化预览窗口的构造函数 + /// + public preview() + { + InitializeComponent(); + } + + /// + /// 动态更新预览图像(线程安全) + /// + /// 要显示的图像 + public void UpdateImage(Image image) + { + if (this.InvokeRequired) + { + this.Invoke(new Action(UpdateImage), image); + return; + } + + try + { + // 释放旧图像资源 + if (previewImageBox.Image != null) + { + previewImageBox.Image.Dispose(); + previewImageBox.Image = null; + } + + // 克隆新图像 + if (image != null) + { + previewImageBox.Image = (Image)image.Clone(); + } + } + catch (Exception ex) + { + Console.WriteLine($"更新预览图像时出错: {ex.Message}"); + } + } + + /// + /// 窗口关闭时释放资源 + /// + protected override void OnFormClosed(FormClosedEventArgs e) + { + base.OnFormClosed(e); + + // 释放图像资源 + if (previewImageBox.Image != null) + { + previewImageBox.Image.Dispose(); + previewImageBox.Image = null; + } + } + } +} diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/preview.resx b/Windows/CS/Framework4.0/Toprie/Toprie/preview.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Windows/CS/Framework4.0/Toprie/Toprie/preview.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file