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