diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs index 026acc3..85c8a1b 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs @@ -652,11 +652,15 @@ namespace JoyD.Windows.CS // 获取相对于图像的坐标作为矩形起始点 Point imagePoint = ControlPointToImagePoint(e.Location); - // 计算画笔大小在图像坐标系统中的缩放值 + // 画笔大小应该基于鼠标光标的实际视觉大小 + // 在控件坐标系中,画笔大小就是用户感知的光标大小 + // 需要将控件坐标系统中的画笔大小转换为图像坐标系统 + // 计算反向缩放比例:将控件坐标转换为图像坐标的比例 float scaleX = (float)picBoxTemp.Image.Width / picBoxTemp.ClientSize.Width; float scaleY = (float)picBoxTemp.Image.Height / picBoxTemp.ClientSize.Height; - // 按下鼠标时初始框以鼠标位置为中心,大小为画笔大小(根据缩放比例调整) + // 按下鼠标时初始框以鼠标位置为中心,大小为画笔大小(根据图像缩放比例调整) + // 这样无论图像如何缩放,画笔大小在用户视觉上始终保持与光标大小一致 float scaledHalfBrushSizeX = _currentBrushSize / 2 * scaleX; float scaledHalfBrushSizeY = _currentBrushSize / 2 * scaleY; @@ -1280,7 +1284,8 @@ namespace JoyD.Windows.CS // 获取相对于图像的当前坐标 Point currentImagePoint = ControlPointToImagePoint(e.Location); - // 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高(考虑缩放比例) + // 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高(基于光标大小) + // 使用反向缩放比例:将控件坐标中的光标大小转换为图像坐标 float scaleX = (float)picBoxTemp.Image.Width / picBoxTemp.ClientSize.Width; float scaleY = (float)picBoxTemp.Image.Height / picBoxTemp.ClientSize.Height; float scaledHalfBrushSizeX = _currentBrushSize / 2 * scaleX; @@ -1288,7 +1293,7 @@ namespace JoyD.Windows.CS int x = _rectangleStartPoint.X; int y = _rectangleStartPoint.Y; - // 右下角为当前鼠标位置+画笔一半的宽高(根据缩放比例调整) + // 右下角为当前鼠标位置+画笔一半的宽高(基于光标大小转换) Point endPoint = new Point( (int)(currentImagePoint.X + scaledHalfBrushSizeX), (int)(currentImagePoint.Y + scaledHalfBrushSizeY) @@ -1771,7 +1776,8 @@ namespace JoyD.Windows.CS // 获取相对于图像的当前坐标 Point currentImagePoint = ControlPointToImagePoint(e.Location); - // 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高(考虑缩放比例) + // 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高(基于光标大小) + // 使用反向缩放比例:将控件坐标中的光标大小转换为图像坐标 float scaleX = (float)picBoxTemp.Image.Width / picBoxTemp.ClientSize.Width; float scaleY = (float)picBoxTemp.Image.Height / picBoxTemp.ClientSize.Height; float scaledHalfBrushSizeX = _currentBrushSize / 2 * scaleX; @@ -1779,7 +1785,7 @@ namespace JoyD.Windows.CS int x = _rectangleStartPoint.X; int y = _rectangleStartPoint.Y; - // 右下角为当前鼠标位置+画笔一半的宽高(根据缩放比例调整) + // 右下角为当前鼠标位置+画笔一半的宽高(基于光标大小转换) Point endPoint = new Point( (int)(currentImagePoint.X + scaledHalfBrushSizeX), (int)(currentImagePoint.Y + scaledHalfBrushSizeY)