优化温差图模式下矩形绘制逻辑:确保矩形区左上点和右下点符合min/max规则,严格按照用户要求实现

This commit is contained in:
zqm
2025-11-11 08:40:05 +08:00
parent 61f341003b
commit 9c86cc2e5f

View File

@@ -1291,21 +1291,40 @@ namespace JoyD.Windows.CS
float scaledHalfBrushSizeX = _currentBrushSize / 2 * scaleX; float scaledHalfBrushSizeX = _currentBrushSize / 2 * scaleX;
float scaledHalfBrushSizeY = _currentBrushSize / 2 * scaleY; float scaledHalfBrushSizeY = _currentBrushSize / 2 * scaleY;
// 计算起始点和结束 // 计算光标块的左上点和右下
Point startPoint = new Point( Point cursorTopLeft = new Point(
(int)(_rectangleStartPoint.X), (int)(currentImagePoint.X - scaledHalfBrushSizeX),
(int)(_rectangleStartPoint.Y) (int)(currentImagePoint.Y - scaledHalfBrushSizeY)
); );
Point endPoint = new Point( Point cursorBottomRight = new Point(
(int)(currentImagePoint.X + scaledHalfBrushSizeX), (int)(currentImagePoint.X + scaledHalfBrushSizeX),
(int)(currentImagePoint.Y + scaledHalfBrushSizeY) (int)(currentImagePoint.Y + scaledHalfBrushSizeY)
); );
// 无论绘制方向如何,都确保左上角为起始 // 起笔方块的右下
int x = Math.Min(startPoint.X, endPoint.X); Point startBottomRight = new Point(
int y = Math.Min(startPoint.Y, endPoint.Y); _rectangleStartPoint.X + (int)(_currentBrushSize * scaleX),
int width = Math.Abs(endPoint.X - startPoint.X); _rectangleStartPoint.Y + (int)(_currentBrushSize * scaleY)
int height = Math.Abs(endPoint.Y - startPoint.Y); );
// 确保矩形区有左上和右下两个点
// 矩形区左上点=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); Rectangle rect = new Rectangle(x, y, width, height);