修复设置窗口关闭后配置未应用和温度计算坐标修正问题
This commit is contained in:
@@ -183,7 +183,15 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
public DetectionZone CurrentDetectionZone
|
public DetectionZone CurrentDetectionZone
|
||||||
{
|
{
|
||||||
get { return _detectionZone; }
|
get { return _detectionZone; }
|
||||||
set { _detectionZone = value; }
|
set
|
||||||
|
{
|
||||||
|
_detectionZone = value;
|
||||||
|
// 同时更新DeviceManager的检测区配置
|
||||||
|
if (_deviceManager != null)
|
||||||
|
{
|
||||||
|
_deviceManager.DetectionZone = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -3305,6 +3313,10 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
this.CurrentDetectionZone = JoyD.Windows.CS.Setting.Form.CurrentDetectionZone;
|
this.CurrentDetectionZone = JoyD.Windows.CS.Setting.Form.CurrentDetectionZone;
|
||||||
// 保存修改后的检测区配置到文件
|
// 保存修改后的检测区配置到文件
|
||||||
SaveMenuConfig();
|
SaveMenuConfig();
|
||||||
|
|
||||||
|
// 重新加载测温区和温差数据,应用新的配置
|
||||||
|
LoadZoneConfig();
|
||||||
|
LoadTemperatureDiffConfig();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -308,6 +308,9 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
// 加载的温差配置
|
// 加载的温差配置
|
||||||
private TemperatureDiffConfig _loadedTemperatureDiffConfig = new TemperatureDiffConfig();
|
private TemperatureDiffConfig _loadedTemperatureDiffConfig = new TemperatureDiffConfig();
|
||||||
|
|
||||||
|
// 检测区配置
|
||||||
|
private DetectionZone _detectionZone = new DetectionZone();
|
||||||
|
|
||||||
// 温度数据处理相关
|
// 温度数据处理相关
|
||||||
private volatile byte[] _lastTemperatureFrame; // 存储最后一帧温度数据
|
private volatile byte[] _lastTemperatureFrame; // 存储最后一帧温度数据
|
||||||
private Thread _temperatureProcessingThread; // 温度数据处理线程
|
private Thread _temperatureProcessingThread; // 温度数据处理线程
|
||||||
@@ -496,6 +499,16 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 检测区配置属性
|
||||||
|
/// 用于设置温度计算时的检测区位置
|
||||||
|
/// </summary>
|
||||||
|
public DetectionZone DetectionZone
|
||||||
|
{
|
||||||
|
get { return _detectionZone; }
|
||||||
|
set { _detectionZone = value; }
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 加载所有配置文件
|
/// 加载所有配置文件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -2284,10 +2297,16 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
float sumTemp = 0;
|
float sumTemp = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
|
// 将相对坐标转换为绝对坐标(考虑检测区位置)
|
||||||
|
int absoluteX = _detectionZone.X + zone.X;
|
||||||
|
int absoluteY = _detectionZone.Y + zone.Y;
|
||||||
|
int absoluteWidth = zone.Width;
|
||||||
|
int absoluteHeight = zone.Height;
|
||||||
|
|
||||||
// 计算测温区内的温度统计数据
|
// 计算测温区内的温度统计数据
|
||||||
for (int y = zone.Y; y < zone.Y + zone.Height && y < temperatureData.RealTemperatureMatrix.GetLength(0); y++)
|
for (int y = absoluteY; y < absoluteY + absoluteHeight && y < temperatureData.RealTemperatureMatrix.GetLength(0); y++)
|
||||||
{
|
{
|
||||||
for (int x = zone.X; x < zone.X + zone.Width && x < temperatureData.RealTemperatureMatrix.GetLength(1); x++)
|
for (int x = absoluteX; x < absoluteX + absoluteWidth && x < temperatureData.RealTemperatureMatrix.GetLength(1); x++)
|
||||||
{
|
{
|
||||||
float temp = temperatureData.RealTemperatureMatrix[y, x];
|
float temp = temperatureData.RealTemperatureMatrix[y, x];
|
||||||
if (temp < minTemp)
|
if (temp < minTemp)
|
||||||
@@ -2330,21 +2349,24 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Point pixel = pixelTemp.Key;
|
Point relativePixel = pixelTemp.Key;
|
||||||
double configTemp = pixelTemp.Value;
|
double configTemp = pixelTemp.Value;
|
||||||
|
|
||||||
|
// 将相对坐标转换为绝对坐标(考虑检测区位置)
|
||||||
|
Point absolutePixel = new Point(_detectionZone.X + relativePixel.X, _detectionZone.Y + relativePixel.Y);
|
||||||
|
|
||||||
// 检查像素点是否在温度矩阵范围内
|
// 检查像素点是否在温度矩阵范围内
|
||||||
if (pixel.Y >= 0 && pixel.Y < temperatureData.RealTemperatureMatrix.GetLength(0) &&
|
if (absolutePixel.Y >= 0 && absolutePixel.Y < temperatureData.RealTemperatureMatrix.GetLength(0) &&
|
||||||
pixel.X >= 0 && pixel.X < temperatureData.RealTemperatureMatrix.GetLength(1))
|
absolutePixel.X >= 0 && absolutePixel.X < temperatureData.RealTemperatureMatrix.GetLength(1))
|
||||||
{
|
{
|
||||||
// 获取当前温度
|
// 获取当前温度
|
||||||
float currentTemp = temperatureData.RealTemperatureMatrix[pixel.Y, pixel.X];
|
float currentTemp = temperatureData.RealTemperatureMatrix[absolutePixel.Y, absolutePixel.X];
|
||||||
|
|
||||||
// 计算温差
|
// 计算温差
|
||||||
float diff = currentTemp - (float)configTemp;
|
float diff = currentTemp - (float)configTemp;
|
||||||
|
|
||||||
// 添加到温度数据对象中
|
// 添加到温度数据对象中,使用相对坐标作为键
|
||||||
temperatureData.TemperatureDiffs[pixel] = diff;
|
temperatureData.TemperatureDiffs[relativePixel] = diff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|||||||
Reference in New Issue
Block a user