优化温差图绘制逻辑:更新代码注释,明确基于光标视觉大小的画笔缩放实现原理
This commit is contained in:
@@ -652,11 +652,15 @@ namespace JoyD.Windows.CS
|
||||
// 获取相对于图像的坐标作为矩形起始点
|
||||
Point imagePoint = ControlPointToImagePoint(e.Location);
|
||||
|
||||
// 计算画笔大小在图像坐标系统中的缩放值
|
||||
// 画笔大小应该基于鼠标光标的实际视觉大小
|
||||
// 在控件坐标系中,画笔大小就是用户感知的光标大小
|
||||
// 需要将控件坐标系统中的画笔大小转换为图像坐标系统
|
||||
// 计算反向缩放比例:将控件坐标转换为图像坐标的比例
|
||||
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;
|
||||
|
||||
@@ -1280,7 +1284,8 @@ namespace JoyD.Windows.CS
|
||||
// 获取相对于图像的当前坐标
|
||||
Point currentImagePoint = ControlPointToImagePoint(e.Location);
|
||||
|
||||
// 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高(考虑缩放比例)
|
||||
// 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高(基于光标大小)
|
||||
// 使用反向缩放比例:将控件坐标中的光标大小转换为图像坐标
|
||||
float scaleX = (float)picBoxTemp.Image.Width / picBoxTemp.ClientSize.Width;
|
||||
float scaleY = (float)picBoxTemp.Image.Height / picBoxTemp.ClientSize.Height;
|
||||
float scaledHalfBrushSizeX = _currentBrushSize / 2 * scaleX;
|
||||
@@ -1288,7 +1293,7 @@ namespace JoyD.Windows.CS
|
||||
|
||||
int x = _rectangleStartPoint.X;
|
||||
int y = _rectangleStartPoint.Y;
|
||||
// 右下角为当前鼠标位置+画笔一半的宽高(根据缩放比例调整)
|
||||
// 右下角为当前鼠标位置+画笔一半的宽高(基于光标大小转换)
|
||||
Point endPoint = new Point(
|
||||
(int)(currentImagePoint.X + scaledHalfBrushSizeX),
|
||||
(int)(currentImagePoint.Y + scaledHalfBrushSizeY)
|
||||
@@ -1771,7 +1776,8 @@ namespace JoyD.Windows.CS
|
||||
// 获取相对于图像的当前坐标
|
||||
Point currentImagePoint = ControlPointToImagePoint(e.Location);
|
||||
|
||||
// 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高(考虑缩放比例)
|
||||
// 计算矩形参数:左上点是起笔方块的左上点,右下点是当前鼠标位置+画笔一半的宽高(基于光标大小)
|
||||
// 使用反向缩放比例:将控件坐标中的光标大小转换为图像坐标
|
||||
float scaleX = (float)picBoxTemp.Image.Width / picBoxTemp.ClientSize.Width;
|
||||
float scaleY = (float)picBoxTemp.Image.Height / picBoxTemp.ClientSize.Height;
|
||||
float scaledHalfBrushSizeX = _currentBrushSize / 2 * scaleX;
|
||||
@@ -1779,7 +1785,7 @@ namespace JoyD.Windows.CS
|
||||
|
||||
int x = _rectangleStartPoint.X;
|
||||
int y = _rectangleStartPoint.Y;
|
||||
// 右下角为当前鼠标位置+画笔一半的宽高(根据缩放比例调整)
|
||||
// 右下角为当前鼠标位置+画笔一半的宽高(基于光标大小转换)
|
||||
Point endPoint = new Point(
|
||||
(int)(currentImagePoint.X + scaledHalfBrushSizeX),
|
||||
(int)(currentImagePoint.Y + scaledHalfBrushSizeY)
|
||||
|
||||
Reference in New Issue
Block a user