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;