修改检测区功能

This commit is contained in:
zqm
2026-01-08 17:22:43 +08:00
parent 2a1aa74eeb
commit df4159712e
3 changed files with 54 additions and 47 deletions

View File

@@ -2546,7 +2546,8 @@ namespace JoyD.Windows.CS.Toprie
int y = int.Parse(parts[2]);
int width = int.Parse(parts[3]);
int height = int.Parse(parts[4]);
Color color = Color.FromName(parts[5]);
// 解析检测区颜色,支持颜色名称和十六进制颜色代码
Color color = CommonUtils.ParseColor(parts[5]);
_detectionZone = new DetectionZone
{

View File

@@ -4,6 +4,46 @@ using System.Drawing;
namespace JoyD.Windows.CS
{
/// <summary>
/// 通用工具类,包含各种通用方法
/// </summary>
public static class CommonUtils
{
/// <summary>
/// 通用颜色解析方法,支持颜色名称和十六进制颜色代码
/// </summary>
/// <param name="colorString">颜色字符串,可以是颜色名称或十六进制代码</param>
/// <param name="defaultColor">解析失败时使用的默认颜色</param>
/// <returns>解析后的Color对象</returns>
public static Color ParseColor(string colorString, Color defaultColor = default(Color))
{
if (string.IsNullOrWhiteSpace(colorString))
{
// 如果默认颜色未指定或为空,使用黑色
return defaultColor == default(Color) ? Color.Black : defaultColor;
}
try
{
// 首先尝试解析十六进制颜色代码
return ColorTranslator.FromHtml(colorString);
}
catch
{
try
{
// 如果解析失败,尝试解析颜色名称
return Color.FromName(colorString);
}
catch
{
// 如果都失败,返回默认颜色
return defaultColor == default(Color) ? Color.Black : defaultColor;
}
}
}
}
/// <summary>
/// 检测区配置类,用于存储检测区的信息
/// </summary>

View File

@@ -2774,8 +2774,10 @@ namespace JoyD.Windows.CS
Rectangle controlDetectionRect = ImageRectangleToControlRectangle(detectionRect);
// 高亮显示检测区
using (Pen pen = new Pen(_tempDetectionZone.Color, 3))
using (Pen pen = new Pen(_tempDetectionZone.Color, 2))
{
// 设置为虚线边框,与进入前的虚线样式保持一致,确保可见
pen.DashStyle = DashStyle.Dash;
// 设置绘制质量为无抗锯齿,确保边界清晰
e.Graphics.SmoothingMode = SmoothingMode.None;
e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
@@ -2825,11 +2827,9 @@ namespace JoyD.Windows.CS
{
// 计算检测区在控件中的坐标和大小
// 创建虚线画笔
using (Pen pen = new Pen(Color.Black, 2))
using (Pen pen = new Pen(_detectionZone.Color, 2))
{
pen.DashStyle = DashStyle.Dash;
// 绘制检测区虚线矩形
Rectangle destRect = new Rectangle(0, 0, picBoxTemp.ClientSize.Width, picBoxTemp.ClientSize.Height);
// 设置绘制质量为无抗锯齿,确保边界清晰
e.Graphics.SmoothingMode = SmoothingMode.None;
e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
@@ -3660,17 +3660,8 @@ namespace JoyD.Windows.CS
int.TryParse(parts[3], out int width);
int.TryParse(parts[4], out int height);
// 解析颜色
Color color;
try
{
color = ColorTranslator.FromHtml(parts[5]);
}
catch
{
// 如果颜色解析失败,使用默认颜色
color = Color.Red;
}
// 解析颜色,使用通用颜色解析方法,支持颜色名称和十六进制颜色代码
Color color = CommonUtils.ParseColor(parts[5], Color.Red);
// 创建新的测温区并添加到列表
// 从CSV文件第一列获取原始索引值
@@ -4892,16 +4883,8 @@ namespace JoyD.Windows.CS
double temperature = Convert.ToDouble(parts[0]);
// 兼容两种颜色格式:十六进制颜色代码和颜色名称
Color color;
try
{
// 首先尝试解析十六进制颜色代码
color = ColorTranslator.FromHtml(parts[1]);
}
catch
{
// 如果解析失败,尝试解析颜色名称
color = Color.FromName(parts[1]);
}
// 使用通用颜色解析方法,支持颜色名称和十六进制颜色代码
color = CommonUtils.ParseColor(parts[1]);
// 添加到温差图例列表
int rowIndex = dataGridViewTempDiff.Rows.Add();
@@ -5387,16 +5370,8 @@ namespace JoyD.Windows.CS
// 兼容两种颜色格式:十六进制颜色代码和颜色名称
Color color;
try
{
// 首先尝试解析十六进制颜色代码
color = ColorTranslator.FromHtml(parts[5]);
}
catch
{
// 如果解析失败,尝试解析颜色名称
color = Color.FromName(parts[5]);
}
// 使用通用颜色解析方法,支持颜色名称和十六进制颜色代码
color = CommonUtils.ParseColor(parts[5]);
// 创建区域信息
regions.Add(new RegionInfo
@@ -5527,17 +5502,8 @@ namespace JoyD.Windows.CS
if (double.TryParse(parts[0].Replace("°C", ""), out double tempValue))
{
// 兼容两种颜色格式:十六进制颜色代码和颜色名称
Color color;
try
{
// 首先尝试解析十六进制颜色代码
color = ColorTranslator.FromHtml(parts[1]);
}
catch
{
// 如果解析失败,尝试解析颜色名称
color = Color.FromName(parts[1]);
}
// 使用通用颜色解析方法,支持颜色名称和十六进制颜色代码
Color color = CommonUtils.ParseColor(parts[1]);
tempToColorMap[tempValue] = color;
// 添加到数据列表