From 78c46dad6c63c83f04a0fbff4625a5a580e796a0 Mon Sep 17 00:00:00 2001 From: zqm Date: Fri, 31 Oct 2025 14:07:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0UpdateInfo=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E7=94=A8=E9=80=8F=E6=98=8E=E8=89=B2=E6=B8=85?= =?UTF-8?q?=E7=A9=BAInfo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CS/Framework4.0/Toprie/Toprie/Camera.cs | 51 +++++++++++++++---- .../CS/Framework4.0/Toprie/Toprie/README.md | 7 +-- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs index b1f92d8..a831993 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs @@ -138,7 +138,9 @@ namespace JoyD.Windows.CS.Toprie /// 更新InfoImage显示 /// 1. 如果暂停,显示暂停信息 /// 2. 否则如果Ping不通或断开,显示重连信息 - /// 3. 否则清空InfoImage + /// 3. 否则满足就绪条件 + /// - 在就绪条件下,如果有温度数据,显示最高温度 + /// - 否则清空Info /// 4. 最后调用更新UI /// private void UpdateInfo() @@ -148,7 +150,7 @@ namespace JoyD.Windows.CS.Toprie if (DesignMode) return; try - { + { lock (_infoImageLock) { // 检查连接状态 @@ -157,14 +159,21 @@ namespace JoyD.Windows.CS.Toprie bool isPaused = _isPaused; // 使用_isPaused标志判断暂停状态 bool isPingFailed = !IsDevicePingable; + // 获取温度数据 + TemperatureData temperatureData = null; + lock (_lastTemperatureDataLock) + { + temperatureData = _lastTemperatureData; + } + // 根据用户要求的优先级显示信息:先检查暂停状态,然后再检查Ping状态和连接状态 using (Graphics g = Graphics.FromImage(_infoImage)) { - // 设置半透明背景 - g.Clear(Color.FromArgb(128, Color.Transparent)); + // 以透明色清空Info + g.Clear(Color.Transparent); if (isPaused) - { + { // 暂停状态 - 最高优先级 // 绘制暂停文本 string text = "暂停"; @@ -182,7 +191,7 @@ namespace JoyD.Windows.CS.Toprie } } else if (isPingFailed || isDisconnected || isReconnecting) - { + { // 非暂停状态下,检查Ping状态和连接状态 // 确定显示的文本和颜色 @@ -217,12 +226,36 @@ namespace JoyD.Windows.CS.Toprie format); } } - else g.Clear(Color.Transparent); + else + { + // 就绪条件:非暂停、Ping可通、连接正常 + if (temperatureData != null) + { + // 有温度数据,显示最高温度 + string text = $"最高温度: {temperatureData.MaxTemperature:F2}°C"; + Color textColor = Color.White; + + using (Font font = new Font("Arial", 24, FontStyle.Bold)) + using (SolidBrush textBrush = new SolidBrush(textColor)) + { + StringFormat format = new StringFormat() { Alignment = StringAlignment.Center }; + + // 将最高温度文本居中显示 + g.DrawString(text, font, textBrush, + new RectangleF(0, BUFFER_HEIGHT / 2 - 24, BUFFER_WIDTH, 48), + format); + } + } + else + { + // 没有温度数据,清空Info + g.Clear(Color.Transparent); + } + } } - // 否则清空InfoImage(已在开头处理) // 设置显示标志 - _isDisplayingInfo = (isPaused || isDisconnected || isReconnecting); + _isDisplayingInfo = (isPaused || isDisconnected || isReconnecting || (temperatureData != null)); } // 调用更新UI diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/README.md b/Windows/CS/Framework4.0/Toprie/Toprie/README.md index 9ec21fe..bab992b 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/README.md +++ b/Windows/CS/Framework4.0/Toprie/Toprie/README.md @@ -12,9 +12,10 @@ 5. 图像更新时, 保存LastImage, 调用更新到UI 6. 2-5 只在非暂停状态下调用更新,暂停状态下不更新Info和UI ### 更新Info: - 1. 如果暂停,显示暂停信息,否则如果Ping不通或断开,显示重连信息, - 2. 如果有温度数据,显示最高温度,否则清空Info - 3. 最后调用更新UI + 1. 以透明色清空Info + 2. 如果暂停,显示暂停信息,否则如果Ping不通或断开,显示重连信息 否则满足就绪条件 + 3. 在就绪条件下,如果有温度数据,显示最高温度 + 4. 最后调用更新UI ### 更新UI: 1. 先将LastImage绘制到全局缓冲 2. 再将InfoImage绘制到缓冲