From d945a37a55be719a51a2c2555c0505f9f6d665fc Mon Sep 17 00:00:00 2001 From: zqm Date: Mon, 10 Nov 2025 17:10:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B8=A9=E5=B7=AE=E5=9B=BE?= =?UTF-8?q?=E7=BB=98=E5=88=B6=E6=97=B6=E7=9F=A9=E5=BD=A2=E6=A1=86=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=E5=8F=97=E7=BC=A9=E6=94=BE=E6=AF=94=E4=BE=8B=E5=BD=B1?= =?UTF-8?q?=E5=93=8D=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CS/Framework4.0/Toprie/Toprie/Setting.cs | 46 ++++++++++++++----- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs index 34f5bea..026acc3 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs @@ -652,10 +652,18 @@ namespace JoyD.Windows.CS // 获取相对于图像的坐标作为矩形起始点 Point imagePoint = ControlPointToImagePoint(e.Location); - // 按下鼠标时初始框以鼠标位置为中心,大小为画笔大小 - // 计算初始矩形的左上角和右下角(以鼠标位置为中心,减去和加上画笔一半宽高) - int halfBrushSize = _currentBrushSize / 2; - _rectangleStartPoint = new Point(imagePoint.X - halfBrushSize, imagePoint.Y - halfBrushSize); + // 计算画笔大小在图像坐标系统中的缩放值 + 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; + + _rectangleStartPoint = new Point( + (int)(imagePoint.X - scaledHalfBrushSizeX), + (int)(imagePoint.Y - scaledHalfBrushSizeY) + ); _isDrawingRectangle = true; return; } @@ -1272,12 +1280,19 @@ namespace JoyD.Windows.CS // 获取相对于图像的当前坐标 Point currentImagePoint = ControlPointToImagePoint(e.Location); - // 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高 - int halfBrushSize = _currentBrushSize / 2; + // 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高(考虑缩放比例) + 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; + int x = _rectangleStartPoint.X; int y = _rectangleStartPoint.Y; - // 右下角为当前鼠标位置+画笔一半的宽高 - Point endPoint = new Point(currentImagePoint.X + halfBrushSize, currentImagePoint.Y + halfBrushSize); + // 右下角为当前鼠标位置+画笔一半的宽高(根据缩放比例调整) + Point endPoint = new Point( + (int)(currentImagePoint.X + scaledHalfBrushSizeX), + (int)(currentImagePoint.Y + scaledHalfBrushSizeY) + ); int width = endPoint.X - x; int height = endPoint.Y - y; @@ -1756,12 +1771,19 @@ namespace JoyD.Windows.CS // 获取相对于图像的当前坐标 Point currentImagePoint = ControlPointToImagePoint(e.Location); - // 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高 - int halfBrushSize = _currentBrushSize / 2; + // 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高(考虑缩放比例) + 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; + int x = _rectangleStartPoint.X; int y = _rectangleStartPoint.Y; - // 右下角为当前鼠标位置+画笔一半的宽高 - Point endPoint = new Point(currentImagePoint.X + halfBrushSize, currentImagePoint.Y + halfBrushSize); + // 右下角为当前鼠标位置+画笔一半的宽高(根据缩放比例调整) + Point endPoint = new Point( + (int)(currentImagePoint.X + scaledHalfBrushSizeX), + (int)(currentImagePoint.Y + scaledHalfBrushSizeY) + ); int width = endPoint.X - x; int height = endPoint.Y - y;