diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs index 3c87bae..8e62d92 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs @@ -2902,128 +2902,131 @@ namespace JoyD.Windows.CS.Toprie // 清除DisplayImage为透明色 g.Clear(Color.Transparent); - // 2. 如果没有温度数据或温度数据的时间3秒之前,返回 - TemperatureData temperatureData = _deviceManager.LastTemperature; - if (temperatureData == null || temperatureData.Timestamp == null) - return; - - TimeSpan timeDiff = DateTime.Now - temperatureData.Timestamp; - if (timeDiff.TotalSeconds > 3) - return; - - // 3. 温度显示菜单下如果未勾选区域温度和全局温度,则不显示任何温度信息 - if (!_showGlobalTemperature && !_showAreaTemperature) - return; - - // 4. 如果勾选了全局温度且未勾选区域温度,则显示全局温度(居中显示),否则显示区域温度(居中显示) - bool isGlobalTemperatureMode = _showGlobalTemperature && !_showAreaTemperature; - - // 5. 如果勾选了区域温度,则显示区域框和编号,否则不显示区域框 - if (_showAreaTemperature) + if (_deviceManager.CurrentImageMode == ImageMode.Infrared) { - try + // 2. 如果没有温度数据或温度数据的时间3秒之前,返回 + TemperatureData temperatureData = _deviceManager.LastTemperature; + if (temperatureData == null || temperatureData.Timestamp == null) + return; + + TimeSpan timeDiff = DateTime.Now - temperatureData.Timestamp; + if (timeDiff.TotalSeconds > 3) + return; + + // 3. 温度显示菜单下如果未勾选区域温度和全局温度,则不显示任何温度信息 + if (!_showGlobalTemperature && !_showAreaTemperature) + return; + + // 4. 如果勾选了全局温度且未勾选区域温度,则显示全局温度(居中显示),否则显示区域温度(居中显示) + bool isGlobalTemperatureMode = _showGlobalTemperature && !_showAreaTemperature; + + // 5. 如果勾选了区域温度,则显示区域框和编号,否则不显示区域框 + if (_showAreaTemperature) { - // 使用固定的字体和格式对象绘制区域编号 - using (Font font = new Font("微软雅黑", 10, FontStyle.Bold)) + try { - // 遍历已加载的测温区列表,绘制每个区域的框线和编号 - foreach (TemperatureZone zone in _loadedTemperatureZones) + // 使用固定的字体和格式对象绘制区域编号 + using (Font font = new Font("微软雅黑", 10, FontStyle.Bold)) { - // 创建画笔,使用区域的颜色作为框线颜色 - using (Pen pen = new Pen(zone.Color, 2)) + // 遍历已加载的测温区列表,绘制每个区域的框线和编号 + foreach (TemperatureZone zone in _loadedTemperatureZones) { - // 绘制区域框线 - g.DrawRectangle(pen, zone.X, zone.Y, zone.Width, zone.Height); - } - - // 创建画刷,使用区域的颜色作为文字颜色 - using (Brush brush = new SolidBrush(zone.Color)) - { - // 绘制区域编号,编号显示在区域左上角 - PointF numberPosition = new PointF(zone.X + 5, zone.Y + 5); - g.DrawString(zone.Index.ToString(), font, brush, numberPosition); + // 创建画笔,使用区域的颜色作为框线颜色 + using (Pen pen = new Pen(zone.Color, 2)) + { + // 绘制区域框线 + g.DrawRectangle(pen, zone.X, zone.Y, zone.Width, zone.Height); + } + + // 创建画刷,使用区域的颜色作为文字颜色 + using (Brush brush = new SolidBrush(zone.Color)) + { + // 绘制区域编号,编号显示在区域左上角 + PointF numberPosition = new PointF(zone.X + 5, zone.Y + 5); + g.DrawString(zone.Index.ToString(), font, brush, numberPosition); + } } } } - } - catch (Exception ex) - { - Console.WriteLine($"绘制区域框时发生异常: {ex.Message}"); - } - } - - // 6. 根据温度模式显示温度数据 - if (isGlobalTemperatureMode) - { - // 准备温度文本 - List temperatureTexts = new List(); - if (_showAverageTemperature) - { - temperatureTexts.Add($"平均: {temperatureData.AverageTemperature:F2} °C"); - } - if (_showMinTemperature) - { - temperatureTexts.Add($"最低: {temperatureData.MinTemperature:F2} °C"); - } - if (_showMaxTemperature) - { - temperatureTexts.Add($"最高: {temperatureData.MaxTemperature:F2} °C"); - } - - // 记录温度数据日志 - if (temperatureTexts.Count > 0) - { - WriteLog($"全局温度数据 - 平均: {temperatureData.AverageTemperature:F2} °C, 最低: {temperatureData.MinTemperature:F2} °C, 最高: {temperatureData.MaxTemperature:F2} °C"); - } - - // 如果没有要显示的温度文本,直接返回 - if (temperatureTexts.Count == 0) - return; - - // 将List转换为string[],以便传递给DrawTextInAreaCentered方法 - string[] textsArray = temperatureTexts.ToArray(); - - // 调用DrawTextInAreaCentered方法绘制温度文本 - DrawTextInAreaCentered(g, textsArray); - } - else if (_showAreaTemperature) - { - // 区域温度模式:为每个区域计算并显示温度数据 - using (Font font = new Font("微软雅黑", 10, FontStyle.Bold)) - { - // 遍历已加载的测温区列表,为每个区域显示温度数据 - foreach (TemperatureZone zone in _loadedTemperatureZones) + catch (Exception ex) { - // 准备温度文本 - List areaTemperatureTexts = new List(); - - // 直接从ZoneTemperatures字典获取已计算好的区域温度数据 - if (temperatureData.ZoneTemperatures.TryGetValue(zone.Index, out var zoneTempData)) - { - if (_showMaxTemperature) - { - areaTemperatureTexts.Add($"最高: {zoneTempData.MaxTemperature:F2} °C"); - } - if (_showMinTemperature) - { - areaTemperatureTexts.Add($"最低: {zoneTempData.MinTemperature:F2} °C"); - } - if (_showAverageTemperature) - { - areaTemperatureTexts.Add($"平均: {zoneTempData.AverageTemperature:F2} °C"); - } - } + Console.WriteLine($"绘制区域框时发生异常: {ex.Message}"); + } + } - // 创建画刷,使用区域的颜色作为文字颜色 - using (Brush brush = new SolidBrush(zone.Color)) + // 6. 根据温度模式显示温度数据 + if (isGlobalTemperatureMode) + { + // 准备温度文本 + List temperatureTexts = new List(); + if (_showAverageTemperature) + { + temperatureTexts.Add($"平均: {temperatureData.AverageTemperature:F2} °C"); + } + if (_showMinTemperature) + { + temperatureTexts.Add($"最低: {temperatureData.MinTemperature:F2} °C"); + } + if (_showMaxTemperature) + { + temperatureTexts.Add($"最高: {temperatureData.MaxTemperature:F2} °C"); + } + + // 记录温度数据日志 + if (temperatureTexts.Count > 0) + { + WriteLog($"全局温度数据 - 平均: {temperatureData.AverageTemperature:F2} °C, 最低: {temperatureData.MinTemperature:F2} °C, 最高: {temperatureData.MaxTemperature:F2} °C"); + } + + // 如果没有要显示的温度文本,直接返回 + if (temperatureTexts.Count == 0) + return; + + // 将List转换为string[],以便传递给DrawTextInAreaCentered方法 + string[] textsArray = temperatureTexts.ToArray(); + + // 调用DrawTextInAreaCentered方法绘制温度文本 + DrawTextInAreaCentered(g, textsArray); + } + else if (_showAreaTemperature) + { + // 区域温度模式:为每个区域计算并显示温度数据 + using (Font font = new Font("微软雅黑", 10, FontStyle.Bold)) + { + // 遍历已加载的测温区列表,为每个区域显示温度数据 + foreach (TemperatureZone zone in _loadedTemperatureZones) { - // 绘制温度文本,从区域左上角开始,向下排列 - float currentY = zone.Y + 20; // 从区域编号下方开始 - foreach (string text in areaTemperatureTexts) + // 准备温度文本 + List areaTemperatureTexts = new List(); + + // 直接从ZoneTemperatures字典获取已计算好的区域温度数据 + if (temperatureData.ZoneTemperatures.TryGetValue(zone.Index, out var zoneTempData)) { - PointF textPosition = new PointF(zone.X + 5, currentY); - g.DrawString(text, font, brush, textPosition); - currentY += 20; // 每行间隔20像素 + if (_showMaxTemperature) + { + areaTemperatureTexts.Add($"最高: {zoneTempData.MaxTemperature:F2} °C"); + } + if (_showMinTemperature) + { + areaTemperatureTexts.Add($"最低: {zoneTempData.MinTemperature:F2} °C"); + } + if (_showAverageTemperature) + { + areaTemperatureTexts.Add($"平均: {zoneTempData.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像素 + } } } }