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