修改色彩模式属性为方法

This commit is contained in:
zqm
2025-10-29 08:52:20 +08:00
parent df97526930
commit 56119eeaea
3 changed files with 211 additions and 133 deletions

View File

@@ -226,14 +226,33 @@ namespace JoyD.Windows.CS.Toprie
{ {
get get
{ {
return v8Instance.Color_plate; return GetColorPlate();
} }
set set
{ {
v8Instance.Color_plate = value; SetColorPlate(value);
} }
} }
/// <summary>
/// 获取当前色彩模式
/// </summary>
/// <returns>当前色彩模式的值</returns>
public int GetColorPlate()
{
return v8Instance.GetColorPlate();
}
/// <summary>
/// 设置色彩模式
/// </summary>
/// <param name="value">要设置的色彩模式值</param>
/// <returns>设置是否成功</returns>
public bool SetColorPlate(int value)
{
return v8Instance.SetColorPlate(value);
}
// 镜像模式属性 // 镜像模式属性
public int Mirror_mode public int Mirror_mode
{ {

View File

@@ -2290,20 +2290,60 @@ namespace JoyD.Windows.CS.Toprie
// 已在循环外部计算paletteValue避免重复计算 // 已在循环外部计算paletteValue避免重复计算
// 直接设置色彩模式,不再在每次尝试中读取原始值 // 直接设置色彩模式,不再在每次尝试中读取原始值
_a8Sdk.Color_plate = paletteValue; bool setSuccess = false;
try
{
// 直接调用SetColorPlate方法设置色彩模式
setSuccess = _a8Sdk.SetColorPlate(paletteValue);
if (setSuccess)
{
// 短暂延迟,确保设置生效 // 短暂延迟,确保设置生效
Thread.Sleep(50); Thread.Sleep(50);
// 减少读取验证避免嵌套UDP命令 // 再次读取当前值进行验证
// 信任SDK的设置操作不再额外验证 int currentValue = _a8Sdk.GetColorPlate();
setSuccess = (currentValue == paletteValue);
}
}
catch (Exception ex)
{
Log($"色彩模式设置异常: {ex.Message}");
}
// 基于实际结果记录日志和返回
if (setSuccess)
{
Log($"色彩模式设置成功: {paletteType} (值: {paletteValue})"); Log($"色彩模式设置成功: {paletteType} (值: {paletteValue})");
return true;
}
else
{
Log($"色彩模式设置失败: 实际设置未生效 (尝试 {attempt + 1}/{maxRetries})");
if (attempt < maxRetries - 1)
{
Thread.Sleep(retryDelayMs);
continue;
}
else
{
// 最后一次尝试失败,尝试恢复原始值
if (originalValue != -1 && _a8Sdk != null && _connectionStatus == ConnectionStatus.Connected)
{
try
{
Log($"尝试恢复色彩模式为原始值: {originalValue}");
_a8Sdk.Color_plate = originalValue;
}
catch { }
}
}
}
// 移除图像接收重启逻辑,因为色彩模式不影响图像接收 // 移除图像接收重启逻辑,因为色彩模式不影响图像接收
// 仅保留短暂延迟确保设置生效 // 仅保留短暂延迟确保设置生效
Thread.Sleep(200); // 给设备处理时间 Thread.Sleep(200); // 给设备处理时间
// return true; // 已在验证成功后返回
return true;
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@@ -31,8 +31,8 @@ namespace JoyD.Windows.CS.Toprie
{ {
SHUTTER_CORRECTION = 0, SHUTTER_CORRECTION = 0,
SET_AUTO_SHUTTER = 1, SET_AUTO_SHUTTER = 1,
// 根据热像仪SDK,设置色彩模式的命令类型 // 根据设备实际通信协议,设置色彩模式的命令类型
SET_COLOR_PLATE = 2, // 保持为2因为热像仪SDK中也是使用SET_COLOR_PLATE命令 SET_COLOR_PLATE = 17, // 修正为17以匹配设备实际接受的命令格式
SET_MIRROR_VIDEO = 3, SET_MIRROR_VIDEO = 3,
SET_VIDEO_MODE = 4, SET_VIDEO_MODE = 4,
SET_AREA_POS = 5, SET_AREA_POS = 5,
@@ -514,9 +514,11 @@ namespace JoyD.Windows.CS.Toprie
} }
} }
public int Color_plate /// <summary>
{ /// 获取当前色彩模式值
get /// </summary>
/// <returns>色彩模式值,如果获取失败则返回上次已知值</returns>
public int GetColorPlate()
{ {
lock (_colorPlateLock) lock (_colorPlateLock)
{ {
@@ -593,7 +595,13 @@ namespace JoyD.Windows.CS.Toprie
} }
} }
} }
set
/// <summary>
/// 设置色彩模式值
/// </summary>
/// <param name="value">要设置的色彩模式值</param>
/// <returns>设置是否成功</returns>
public bool SetColorPlate(int value)
{ {
lock (_colorPlateLock) lock (_colorPlateLock)
{ {
@@ -606,7 +614,7 @@ namespace JoyD.Windows.CS.Toprie
if (currentValue == value) if (currentValue == value)
{ {
Log($"[色彩模式设置] 当前色彩模式已为目标值,无需设置"); Log($"[色彩模式设置] 当前色彩模式已为目标值,无需设置");
return; return true;
} }
// 使用SDK格式设置色板: ip:param_mode,param_value$ // 使用SDK格式设置色板: ip:param_mode,param_value$
@@ -638,28 +646,39 @@ namespace JoyD.Windows.CS.Toprie
// 移除图像接收重启逻辑,因为色彩模式不影响图像接收 // 移除图像接收重启逻辑,因为色彩模式不影响图像接收
// 仅保留短暂延迟确保设置生效 // 仅保留短暂延迟确保设置生效
Log($"[色彩模式设置] 设置成功,不需要重启图像接收"); Log($"[色彩模式设置] 设置成功,不需要重启图像接收");
return true;
} }
else else
{ {
Log($"[色彩模式设置] 验证失败,实际值: {validatedValue},期望值: {value}"); Log($"[色彩模式设置] 验证失败,实际值: {validatedValue},期望值: {value}");
return false;
} }
} }
else else
{ {
Log($"[色彩模式设置失败] 响应验证失败: {response}"); Log($"[色彩模式设置失败] 响应验证失败: {response}");
return false;
} }
} }
else else
{ {
Log($"[色彩模式设置失败] 命令发送失败或超时响应为null: {success}"); Log($"[色彩模式设置失败] 命令发送失败或超时响应为null: {success}");
return false;
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
Log($"[色彩模式设置异常] {ex.Message}"); Log($"[色彩模式设置异常] {ex.Message}");
return false;
} }
} }
} }
// 保留原属性以保持向后兼容性
public int Color_plate
{
get => GetColorPlate();
set => SetColorPlate(value);
} }
/// <summary> /// <summary>