From 93f8afcfa4977ef0fe9896ef3fa13c014f6cc445 Mon Sep 17 00:00:00 2001 From: zqm Date: Wed, 5 Nov 2025 10:19:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=B8=A9=E5=BA=A6=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E8=8F=9C=E5=8D=95=E5=8A=9F=E8=83=BD=EF=BC=9A=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E6=B8=A9=E5=BA=A6=E3=80=81=E5=8C=BA=E5=9F=9F=E6=B8=A9?= =?UTF-8?q?=E5=BA=A6=E6=98=BE=E7=A4=BA=E5=8F=8A=E4=BA=92=E6=96=A5=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E6=9C=80=E9=AB=98/=E5=B9=B3=E5=9D=87/?= =?UTF-8?q?=E6=9C=80=E4=BD=8E=E6=B8=A9=E5=BA=A6=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Toprie/Toprie/Camera.Designer.cs | 65 ++++++++ .../CS/Framework4.0/Toprie/Toprie/Camera.cs | 143 +++++++++++++++++- .../CS/Framework4.0/Toprie/Toprie/README.md | 9 +- 3 files changed, 212 insertions(+), 5 deletions(-) diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.Designer.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.Designer.cs index 78f85c7..1c659b1 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.Designer.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.Designer.cs @@ -35,6 +35,12 @@ namespace JoyD.Windows.CS.Toprie this.ironGrayToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.redHotToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.rainbow2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.temperatureDisplayToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.globalTemperatureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.areaTemperatureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.maxTemperatureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.avgTemperatureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.minTemperatureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.saveTemperatureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.pauseDetectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -58,6 +64,7 @@ namespace JoyD.Windows.CS.Toprie this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.imageModeToolStripMenuItem, this.colorModeToolStripMenuItem, + this.temperatureDisplayToolStripMenuItem, this.toolStripSeparator1, this.saveTemperatureToolStripMenuItem, this.pauseDetectionToolStripMenuItem}); @@ -87,6 +94,58 @@ namespace JoyD.Windows.CS.Toprie this.visibleModeToolStripMenuItem.Text = "自然模式"; this.visibleModeToolStripMenuItem.Click += new System.EventHandler(this.VisibleModeToolStripMenuItem_Click); // + // temperatureDisplayToolStripMenuItem + // + this.temperatureDisplayToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.globalTemperatureToolStripMenuItem, + this.areaTemperatureToolStripMenuItem, + this.maxTemperatureToolStripMenuItem, + this.avgTemperatureToolStripMenuItem, + this.minTemperatureToolStripMenuItem}); + this.temperatureDisplayToolStripMenuItem.Name = "temperatureDisplayToolStripMenuItem"; + this.temperatureDisplayToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.temperatureDisplayToolStripMenuItem.Text = "温度显示"; + // + // globalTemperatureToolStripMenuItem + // + this.globalTemperatureToolStripMenuItem.CheckOnClick = true; + this.globalTemperatureToolStripMenuItem.Name = "globalTemperatureToolStripMenuItem"; + this.globalTemperatureToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.globalTemperatureToolStripMenuItem.Text = "全局温度"; + this.globalTemperatureToolStripMenuItem.Click += new System.EventHandler(this.GlobalTemperatureToolStripMenuItem_Click); + // + // areaTemperatureToolStripMenuItem + // + this.areaTemperatureToolStripMenuItem.CheckOnClick = true; + this.areaTemperatureToolStripMenuItem.Name = "areaTemperatureToolStripMenuItem"; + this.areaTemperatureToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.areaTemperatureToolStripMenuItem.Text = "区域温度"; + this.areaTemperatureToolStripMenuItem.Click += new System.EventHandler(this.AreaTemperatureToolStripMenuItem_Click); + // + // maxTemperatureToolStripMenuItem + // + this.maxTemperatureToolStripMenuItem.CheckOnClick = true; + this.maxTemperatureToolStripMenuItem.Name = "maxTemperatureToolStripMenuItem"; + this.maxTemperatureToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.maxTemperatureToolStripMenuItem.Text = "最高温度"; + this.maxTemperatureToolStripMenuItem.Click += new System.EventHandler(this.MaxTemperatureToolStripMenuItem_Click); + // + // avgTemperatureToolStripMenuItem + // + this.avgTemperatureToolStripMenuItem.CheckOnClick = true; + this.avgTemperatureToolStripMenuItem.Name = "avgTemperatureToolStripMenuItem"; + this.avgTemperatureToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.avgTemperatureToolStripMenuItem.Text = "平均温度"; + this.avgTemperatureToolStripMenuItem.Click += new System.EventHandler(this.AvgTemperatureToolStripMenuItem_Click); + // + // minTemperatureToolStripMenuItem + // + this.minTemperatureToolStripMenuItem.CheckOnClick = true; + this.minTemperatureToolStripMenuItem.Name = "minTemperatureToolStripMenuItem"; + this.minTemperatureToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.minTemperatureToolStripMenuItem.Text = "最低温度"; + this.minTemperatureToolStripMenuItem.Click += new System.EventHandler(this.MinTemperatureToolStripMenuItem_Click); + // // colorModeToolStripMenuItem // this.colorModeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -218,5 +277,11 @@ namespace JoyD.Windows.CS.Toprie private System.Windows.Forms.ToolStripMenuItem fusionMode4ToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem fusionMode5ToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem saveTemperatureToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem temperatureDisplayToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem globalTemperatureToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem areaTemperatureToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem maxTemperatureToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem avgTemperatureToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem minTemperatureToolStripMenuItem; } } diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs index e228bbc..0368fc4 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs @@ -32,7 +32,13 @@ namespace JoyD.Windows.CS.Toprie private Image _infoImage = null; // 最近一次获取到的温度数据 - + + // 温度显示状态标志 + private bool _showGlobalTemperature = false; // 是否显示全局温度 + private bool _showAreaTemperature = false; // 是否显示区域温度 + private bool _showMaxTemperature = true; // 是否显示最高温度(默认为true) + private bool _showAverageTemperature = false; // 是否显示平均温度 + private bool _showMinTemperature = false; // 是否显示最低温度 // 用于保护_lastImage的线程锁 private readonly object _lastImageLock = new object(); @@ -168,13 +174,60 @@ namespace JoyD.Windows.CS.Toprie } } else if (isReady) - { - // 就绪条件下,根据用户要求不再显示温度数据 + { + // 就绪条件下,根据用户选择显示温度数据 + if ((_showGlobalTemperature || _showAreaTemperature) && _deviceManager != null && _deviceManager.ConnectionStatus == ConnectionStatus.Connected) + { + TemperatureData temperatureData = _deviceManager.LastTemperature; + if (temperatureData != null && temperatureData.Timestamp != null) + { + // 检查温度数据时间是否在最近3秒内 + TimeSpan timeDiff = DateTime.Now - temperatureData.Timestamp; + if (timeDiff.TotalSeconds <= 3) + { + using (Font font = new Font("Arial", 20, FontStyle.Bold)) + using (SolidBrush textBrush = new SolidBrush(Color.White)) + { + StringFormat format = new StringFormat() { Alignment = StringAlignment.Center }; + + // 绘制温度信息 + StringBuilder tempInfoBuilder = new StringBuilder(); + + // 添加温度标题 + tempInfoBuilder.AppendLine(_showGlobalTemperature ? "全局温度" : "区域温度"); + tempInfoBuilder.AppendLine(); + + // 根据勾选状态添加最高温度 + if (_showMaxTemperature) + { + tempInfoBuilder.AppendLine($"最高温度: {temperatureData.MaxTemperature:F2} °C"); + } + + // 根据勾选状态添加平均温度 + if (_showAverageTemperature) + { + tempInfoBuilder.AppendLine($"平均温度: {temperatureData.AverageTemperature:F2} °C"); + } + + // 根据勾选状态添加最低温度 + if (_showMinTemperature) + { + tempInfoBuilder.AppendLine($"最低温度: {temperatureData.MinTemperature:F2} °C"); + } + + // 将温度信息居中显示 + g.DrawString(tempInfoBuilder.ToString(), font, textBrush, + new RectangleF(0, BUFFER_HEIGHT / 4, BUFFER_WIDTH, BUFFER_HEIGHT / 2), + format); + } + } + } + } } } // 设置显示标志 - _isDisplayingInfo = (isPaused || isDisconnected || isReconnecting); + _isDisplayingInfo = (isPaused || isDisconnected || isReconnecting || _showGlobalTemperature || _showAreaTemperature); } // 步骤4:最后调用更新UI(注意:在DeviceManager_ImageReceived中已处理非暂停状态下的UI更新) @@ -1239,6 +1292,12 @@ namespace JoyD.Windows.CS.Toprie /// private void ContextMenuStrip1_Opening(object sender, System.ComponentModel.CancelEventArgs e) { + // 确保全局温度和区域温度的互斥性 + // 如果两个都被选中,默认保持全局温度选中状态,取消区域温度选中状态 + if (globalTemperatureToolStripMenuItem.Checked && areaTemperatureToolStripMenuItem.Checked) + { + areaTemperatureToolStripMenuItem.Checked = false; + } // 暂停菜单项的文本已经在点击事件中更新,这里无需再次更新 if (DesignMode) return; try @@ -1772,6 +1831,82 @@ namespace JoyD.Windows.CS.Toprie /// /// 事件发送者 /// 事件参数 + /// + /// 全局温度菜单项点击事件处理 + /// 当全局温度被勾选时,自动取消区域温度的勾选 + /// + private void GlobalTemperatureToolStripMenuItem_Click(object sender, EventArgs e) + { + // 更新全局温度显示状态标志 + _showGlobalTemperature = globalTemperatureToolStripMenuItem.Checked; + + // 当全局温度被勾选时,自动取消区域温度的勾选 + if (_showGlobalTemperature) + { + _showAreaTemperature = false; + areaTemperatureToolStripMenuItem.Checked = false; + } + + // 刷新UI以显示或隐藏温度信息 + UpdateInfo(); + } + + /// + /// 区域温度菜单项点击事件处理 + /// 当区域温度被勾选时,自动取消全局温度的勾选 + /// + private void AreaTemperatureToolStripMenuItem_Click(object sender, EventArgs e) + { + // 更新区域温度显示状态标志 + _showAreaTemperature = areaTemperatureToolStripMenuItem.Checked; + + // 当区域温度被勾选时,自动取消全局温度的勾选 + if (_showAreaTemperature) + { + _showGlobalTemperature = false; + globalTemperatureToolStripMenuItem.Checked = false; + } + + // 刷新UI以显示或隐藏温度信息 + UpdateInfo(); + } + + /// + /// 最高温度菜单项点击事件处理 + /// + private void MaxTemperatureToolStripMenuItem_Click(object sender, EventArgs e) + { + // 更新最高温度显示状态标志 + _showMaxTemperature = maxTemperatureToolStripMenuItem.Checked; + + // 刷新UI以更新温度信息显示 + UpdateInfo(); + } + + /// + /// 平均温度菜单项点击事件处理 + /// + private void AverageTemperatureToolStripMenuItem_Click(object sender, EventArgs e) + { + // 更新平均温度显示状态标志 + _showAverageTemperature = averageTemperatureToolStripMenuItem.Checked; + + // 刷新UI以更新温度信息显示 + UpdateInfo(); + } + + /// + /// 最低温度菜单项点击事件处理 + /// + private void MinTemperatureToolStripMenuItem_Click(object sender, EventArgs e) + { + // 更新最低温度显示状态标志 + _showMinTemperature = minTemperatureToolStripMenuItem.Checked; + + // 刷新UI以更新温度信息显示 + UpdateInfo(); + } + private void SaveTemperatureToolStripMenuItem_Click(object sender, EventArgs e) { try diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/README.md b/Windows/CS/Framework4.0/Toprie/Toprie/README.md index d130a0e..aefc111 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/README.md +++ b/Windows/CS/Framework4.0/Toprie/Toprie/README.md @@ -119,4 +119,11 @@ 1. 时间戳转换时需注意低字节在前、高字节在后的顺序 2. 温补值是设备补偿值,必须应用到原始温度上才能得到与网页计算结果一致的温度 3. 分辨率不同时,温度数据长度会相应变化,解析时需根据实际分辨率计算 -4. 原始温度数据更新频率约为每秒一条 \ No newline at end of file +4. 原始温度数据更新频率约为每秒一条 + +### 温度显示菜单 +1. 增加温度显示菜单 +2. 温度显示菜单下显示全局温度(可勾选) +3. 温度显示菜单下显示区域温度(可勾选) +4. 区域温度和全局温度只能二选一显示 +5. 温度显示菜单下显示最高温度、平均温度和最低温度(可勾选) \ No newline at end of file