From 0b996902b543f9f3050d125e763db5773fa36814 Mon Sep 17 00:00:00 2001 From: zqm Date: Sun, 4 Jan 2026 14:03:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=8C=BA=E5=9F=9F=E6=B8=A9?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CS/Framework4.0/Toprie/Toprie/Camera.cs | 50 ++++++++++++++++++- .../Toprie/Toprie/TemperatureData.cs | 9 ++-- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs index 527e678..da6fa17 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs @@ -2927,7 +2927,7 @@ namespace JoyD.Windows.CS.Toprie } } - // 6. 只有在全局温度模式下才显示温度数据 + // 6. 根据温度模式显示温度数据 if (isGlobalTemperatureMode) { // 准备温度文本 @@ -2961,6 +2961,54 @@ namespace JoyD.Windows.CS.Toprie // 调用DrawTextInAreaCentered方法绘制温度文本 DrawTextInAreaCentered(g, textsArray); } + else if (_showAreaTemperature) + { + // 区域温度模式:为每个区域计算并显示温度数据 + using (Font font = new Font("微软雅黑", 10, FontStyle.Bold)) + { + // 遍历已加载的测温区列表,为每个区域显示温度数据 + foreach (TemperatureZone zone in _loadedTemperatureZones) + { + // 计算区域在温度矩阵中的实际位置 + // 注意:温度矩阵是512×384,而区域坐标是基于图像的512×384分辨率 + int startRow = Math.Max(0, zone.Y); + int startCol = Math.Max(0, zone.X); + int endRow = Math.Min(383, zone.Y + zone.Height - 1); + int endCol = Math.Min(511, zone.X + zone.Width - 1); + + // 获取区域温度统计信息 + RegionTemperatureStats stats = temperatureData.GetRegionStatistics(startRow, startCol, endRow, endCol); + + // 准备温度文本 + List areaTemperatureTexts = new List(); + if (_showMaxTemperature) + { + areaTemperatureTexts.Add($"最高: {stats.MaxTemperature:F2} °C"); + } + if (_showMinTemperature) + { + areaTemperatureTexts.Add($"最低: {stats.MinTemperature:F2} °C"); + } + if (_showAverageTemperature) + { + areaTemperatureTexts.Add($"平均: {stats.AverageTemperature:F2} °C"); + } + + // 创建画刷,使用区域的颜色作为文字颜色 + using (Brush brush = new SolidBrush(zone.Color)) + { + // 绘制温度文本,从区域左上角开始,向下排列 + float currentY = zone.Y + 20; // 从区域编号下方开始 + foreach (string text in areaTemperatureTexts) + { + PointF textPosition = new PointF(zone.X + 5, currentY); + g.DrawString(text, font, brush, textPosition); + currentY += 20; // 每行间隔20像素 + } + } + } + } + } } // 设置显示状态标志 diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/TemperatureData.cs b/Windows/CS/Framework4.0/Toprie/Toprie/TemperatureData.cs index be57fbd..1f70661 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/TemperatureData.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/TemperatureData.cs @@ -252,11 +252,11 @@ namespace JoyD.Windows.CS.Toprie /// 区域温度统计信息 public RegionTemperatureStats GetRegionStatistics(int startRow, int startCol, int endRow, int endCol) { - // 参数验证和边界检查 + // 使用RealTemperatureMatrix的固定尺寸(384x512)进行边界检查 startRow = Math.Max(0, startRow); startCol = Math.Max(0, startCol); - endRow = Math.Min(Height - 1, endRow); - endCol = Math.Min(Width - 1, endCol); + endRow = Math.Min(383, endRow); // RealTemperatureMatrix高度为384 + endCol = Math.Min(511, endCol); // RealTemperatureMatrix宽度为512 if (startRow > endRow || startCol > endCol) return new RegionTemperatureStats(0, 0, 0, 0); @@ -266,11 +266,12 @@ namespace JoyD.Windows.CS.Toprie float max = float.MinValue; int count = 0; + // 使用RealTemperatureMatrix计算统计值 for (int row = startRow; row <= endRow; row++) { for (int col = startCol; col <= endCol; col++) { - float temp = TemperatureMatrix[row, col]; + float temp = RealTemperatureMatrix[row, col]; sum += temp; min = Math.Min(min, temp); max = Math.Max(max, temp);