diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs index 1a30747..34f5bea 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs @@ -652,8 +652,10 @@ namespace JoyD.Windows.CS // 获取相对于图像的坐标作为矩形起始点 Point imagePoint = ControlPointToImagePoint(e.Location); - // 按下鼠标时初始框大小即为笔块大小 - _rectangleStartPoint = imagePoint; + // 按下鼠标时初始框以鼠标位置为中心,大小为画笔大小 + // 计算初始矩形的左上角和右下角(以鼠标位置为中心,减去和加上画笔一半宽高) + int halfBrushSize = _currentBrushSize / 2; + _rectangleStartPoint = new Point(imagePoint.X - halfBrushSize, imagePoint.Y - halfBrushSize); _isDrawingRectangle = true; return; } @@ -1270,11 +1272,14 @@ namespace JoyD.Windows.CS // 获取相对于图像的当前坐标 Point currentImagePoint = ControlPointToImagePoint(e.Location); - // 计算矩形参数:左上点是起笔方块的左上点,右下点是收笔方块的右下点 + // 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高 + int halfBrushSize = _currentBrushSize / 2; int x = _rectangleStartPoint.X; int y = _rectangleStartPoint.Y; - int width = currentImagePoint.X - _rectangleStartPoint.X; - int height = currentImagePoint.Y - _rectangleStartPoint.Y; + // 右下角为当前鼠标位置+画笔一半的宽高 + Point endPoint = new Point(currentImagePoint.X + halfBrushSize, currentImagePoint.Y + halfBrushSize); + int width = endPoint.X - x; + int height = endPoint.Y - y; // 确保矩形大小为正数,调整起点和大小 if (width < 0) @@ -1751,11 +1756,14 @@ namespace JoyD.Windows.CS // 获取相对于图像的当前坐标 Point currentImagePoint = ControlPointToImagePoint(e.Location); - // 计算矩形参数:左上点是起笔方块的左上点,右下点是收笔方块的右下点 + // 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高 + int halfBrushSize = _currentBrushSize / 2; int x = _rectangleStartPoint.X; int y = _rectangleStartPoint.Y; - int width = currentImagePoint.X - _rectangleStartPoint.X; - int height = currentImagePoint.Y - _rectangleStartPoint.Y; + // 右下角为当前鼠标位置+画笔一半的宽高 + Point endPoint = new Point(currentImagePoint.X + halfBrushSize, currentImagePoint.Y + halfBrushSize); + int width = endPoint.X - x; + int height = endPoint.Y - y; // 确保矩形大小为正数,调整起点和大小 if (width < 0)