From 9c86cc2e5f960ea9e11dd2af0249c4f799074174 Mon Sep 17 00:00:00 2001 From: zqm Date: Tue, 11 Nov 2025 08:40:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B8=A9=E5=B7=AE=E5=9B=BE?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E4=B8=8B=E7=9F=A9=E5=BD=A2=E7=BB=98=E5=88=B6?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=9A=E7=A1=AE=E4=BF=9D=E7=9F=A9=E5=BD=A2?= =?UTF-8?q?=E5=8C=BA=E5=B7=A6=E4=B8=8A=E7=82=B9=E5=92=8C=E5=8F=B3=E4=B8=8B?= =?UTF-8?q?=E7=82=B9=E7=AC=A6=E5=90=88min/max=E8=A7=84=E5=88=99=EF=BC=8C?= =?UTF-8?q?=E4=B8=A5=E6=A0=BC=E6=8C=89=E7=85=A7=E7=94=A8=E6=88=B7=E8=A6=81?= =?UTF-8?q?=E6=B1=82=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CS/Framework4.0/Toprie/Toprie/Setting.cs | 39 ++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) 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);