diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs index 3a68e7a..94d890a 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs @@ -1291,21 +1291,40 @@ namespace JoyD.Windows.CS float scaledHalfBrushSizeX = _currentBrushSize / 2 * scaleX; float scaledHalfBrushSizeY = _currentBrushSize / 2 * scaleY; - // 计算起始点和结束点 - Point startPoint = new Point( - (int)(_rectangleStartPoint.X), - (int)(_rectangleStartPoint.Y) + // 计算光标块的左上点和右下点 + Point cursorTopLeft = new Point( + (int)(currentImagePoint.X - scaledHalfBrushSizeX), + (int)(currentImagePoint.Y - scaledHalfBrushSizeY) ); - Point endPoint = new Point( + Point cursorBottomRight = new Point( (int)(currentImagePoint.X + scaledHalfBrushSizeX), (int)(currentImagePoint.Y + scaledHalfBrushSizeY) ); - // 无论绘制方向如何,都确保左上角为起始点 - int x = Math.Min(startPoint.X, endPoint.X); - int y = Math.Min(startPoint.Y, endPoint.Y); - int width = Math.Abs(endPoint.X - startPoint.X); - int height = Math.Abs(endPoint.Y - startPoint.Y); + // 起笔方块的右下点 + Point startBottomRight = new Point( + _rectangleStartPoint.X + (int)(_currentBrushSize * scaleX), + _rectangleStartPoint.Y + (int)(_currentBrushSize * scaleY) + ); + + // 确保矩形区有左上和右下两个点 + // 矩形区左上点=min(矩形区左上点,光标块的左上点) + Point rectTopLeft = new Point( + Math.Min(_rectangleStartPoint.X, cursorTopLeft.X), + Math.Min(_rectangleStartPoint.Y, cursorTopLeft.Y) + ); + + // 矩形区右下点=max(矩形区右下点,光标块的右下点) + Point rectBottomRight = new Point( + Math.Max(startBottomRight.X, cursorBottomRight.X), + Math.Max(startBottomRight.Y, cursorBottomRight.Y) + ); + + // 计算矩形坐标和大小 + int x = rectTopLeft.X; + int y = rectTopLeft.Y; + int width = rectBottomRight.X - rectTopLeft.X; + int height = rectBottomRight.Y - rectTopLeft.Y; Rectangle rect = new Rectangle(x, y, width, height);