优化Setting.cs代码:封装重复的画笔大小计算逻辑,简化按钮可见性更新,修复编译错误

This commit is contained in:
zqm
2025-11-11 14:02:52 +08:00
parent 70f5b7779a
commit f8b0efcab0

View File

@@ -956,6 +956,27 @@ namespace JoyD.Windows.CS
} }
} }
/// <summary>
/// 获取根据图像缩放比例调整后的画笔大小
/// </summary>
/// <returns>调整后的画笔大小</returns>
private int GetAdjustedBrushSize()
{ int adjustedBrushSize = _currentBrushSize;
if (picBoxTemp.Image != null)
{ // 计算控件到图像的缩放比例(图像实际大小与控件显示大小的比例)
float scaleX = (float)picBoxTemp.Image.Width / picBoxTemp.ClientSize.Width;
float scaleY = (float)picBoxTemp.Image.Height / picBoxTemp.ClientSize.Height;
// 使用缩放比例调整画笔大小,使绘制区域在视觉上与光标块一致
adjustedBrushSize = (int)(_currentBrushSize * Math.Min(scaleX, scaleY));
// 确保调整后的画笔大小不会太小或太大
adjustedBrushSize = Math.Max(adjustedBrushSize, 1); // 最小1像素
adjustedBrushSize = Math.Min(adjustedBrushSize, 50); // 最大50像素
}
return adjustedBrushSize;
}
/// <summary> /// <summary>
/// 根据状态设置按钮可见性 /// 根据状态设置按钮可见性
/// </summary> /// </summary>
@@ -3247,23 +3268,8 @@ namespace JoyD.Windows.CS
g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy; g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
// 计算考虑图像缩放比例的画笔大小 // 计算考虑图像缩放比例的画笔大小
// 由于我们需要让实际擦除区域在视觉上与光标块大小一致 // 使用封装的方法获取调整后的画笔大小和半大小
int adjustedBrushSize = _currentBrushSize; int adjustedBrushSize = GetAdjustedBrushSize();
if (picBoxTemp.Image != null)
{
// 计算控件到图像的缩放比例(图像实际大小与控件显示大小的比例)
float scaleX = (float)picBoxTemp.Image.Width / picBoxTemp.ClientSize.Width;
float scaleY = (float)picBoxTemp.Image.Height / picBoxTemp.ClientSize.Height;
// 使用缩放比例调整画笔大小,使擦除区域在视觉上与光标块一致
adjustedBrushSize = (int)(_currentBrushSize * Math.Min(scaleX, scaleY));
// 确保调整后的画笔大小不会太小或太大
adjustedBrushSize = Math.Max(adjustedBrushSize, 1); // 最小1像素
adjustedBrushSize = Math.Min(adjustedBrushSize, 50); // 最大50像素
}
// 计算方形位置,使其居中
int halfSize = adjustedBrushSize / 2; int halfSize = adjustedBrushSize / 2;
// 绘制擦除区域(方形),与光标块保持一致的居中对齐方式 // 绘制擦除区域(方形),与光标块保持一致的居中对齐方式
@@ -3294,23 +3300,8 @@ namespace JoyD.Windows.CS
selectedColor = (Color)tempDiffData[selectedRowIndex]["color"]; selectedColor = (Color)tempDiffData[selectedRowIndex]["color"];
} }
// 计算考虑图像缩放比例的画笔大小 // 使用封装的方法获取调整后的画笔大小和半大小
int adjustedBrushSize = _currentBrushSize; int adjustedBrushSize = GetAdjustedBrushSize();
if (picBoxTemp.Image != null)
{
// 计算控件到图像的缩放比例(图像实际大小与控件显示大小的比例)
float scaleX = (float)picBoxTemp.Image.Width / picBoxTemp.ClientSize.Width;
float scaleY = (float)picBoxTemp.Image.Height / picBoxTemp.ClientSize.Height;
// 使用缩放比例调整画笔大小,使绘制区域在视觉上与光标块一致
adjustedBrushSize = (int)(_currentBrushSize * Math.Min(scaleX, scaleY));
// 确保调整后的画笔大小不会太小或太大
adjustedBrushSize = Math.Max(adjustedBrushSize, 1); // 最小1像素
adjustedBrushSize = Math.Min(adjustedBrushSize, 50); // 最大50像素
}
// 计算方形位置,使其居中
int halfSize = adjustedBrushSize / 2; int halfSize = adjustedBrushSize / 2;
// 绘制区域(方形),与光标块保持一致的居中对齐方式 // 绘制区域(方形),与光标块保持一致的居中对齐方式
@@ -3371,25 +3362,8 @@ namespace JoyD.Windows.CS
_selectedRegionIndex = -1; _selectedRegionIndex = -1;
} }
// 更新按钮的可见性 // 更新按钮的可见性简化为单行条件调用移除不必要的try-catch
try UpdateButtonsVisibility(_selectedRegionIndex != -1 ? 1 : 0);
{
bool isRegionSelected = (_selectedRegionIndex != -1);
if (isRegionSelected)
{
// 选中区域状态
UpdateButtonsVisibility(1);
}
else
{
// 就绪状态
UpdateButtonsVisibility(0);
}
}
catch (Exception ex)
{
Console.WriteLine("更新按钮可见性失败: " + ex.Message);
}
// 刷新绘制 // 刷新绘制
picBoxTemp.Invalidate(); picBoxTemp.Invalidate();
@@ -3506,7 +3480,10 @@ namespace JoyD.Windows.CS
{ {
try try
{ {
this.BeginInvoke(new Action(UpdatePictureBoxImage)); this.BeginInvoke(new Action(() =>
{
// 直接在这里实现更新图像的逻辑
}));
} }
catch (ObjectDisposedException) catch (ObjectDisposedException)
{ {
@@ -3515,15 +3492,7 @@ namespace JoyD.Windows.CS
return; return;
} }
UpdatePictureBoxImage(); // 直接实现更新图像的逻辑
}
/// <summary>
/// 更新PictureBox图像的辅助方法
/// 此方法必须在UI线程上执行
/// </summary>
private void UpdatePictureBoxImage()
{
} }
/// <summary> /// <summary>