修复温差图绘制时线条中断问题,在普通绘制模式下应用正确的缩放比例计算

This commit is contained in:
zqm
2025-11-11 10:47:28 +08:00
parent f67bd812b3
commit 54807d237d

View File

@@ -1686,28 +1686,44 @@ namespace JoyD.Windows.CS
g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver; g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
} }
else else
{ {
// 普通绘制模式 // 普通绘制模式
using (Pen pen = new Pen(selectedColor, _currentBrushSize)) // 计算考虑图像缩放比例的画笔大小
{ int adjustedBrushSize = _currentBrushSize;
if (picBoxTemp.Image != null)
{
// 计算控件到图像的缩放比例(图像实际大小与控件显示大小的比例)
float scaleX = (float)picBoxTemp.Image.Width / picBoxTemp.ClientSize.Width;
float scaleY = (float)picBoxTemp.Image.Height / picBoxTemp.ClientSize.Height;
// 使用缩放比例调整画笔大小,使绘制区域在视觉上与光标块一致
adjustedBrushSize = (int)(_currentBrushSize * Math.Min(scaleX, scaleY));
// 确保调整后的画笔大小不会太小或太大
adjustedBrushSize = Math.Max(adjustedBrushSize, 1); // 最小1像素
adjustedBrushSize = Math.Min(adjustedBrushSize, 50); // 最大50像素
}
using (Pen pen = new Pen(selectedColor, adjustedBrushSize))
{
pen.StartCap = LineCap.Round; pen.StartCap = LineCap.Round;
pen.EndCap = LineCap.Round; pen.EndCap = LineCap.Round;
pen.LineJoin = LineJoin.Round; pen.LineJoin = LineJoin.Round;
// 如果是首次绘制或上一个点无效,记录当前点作为起点 // 如果是首次绘制或上一个点无效,记录当前点作为起点
if (_lastDrawPoint == Point.Empty) if (_lastDrawPoint == Point.Empty)
{ {
_lastDrawPoint = imagePoint; _lastDrawPoint = imagePoint;
// 绘制起始点的圆形 // 绘制起始点的圆形
int radius = _currentBrushSize / 2; int radius = adjustedBrushSize / 2;
g.FillEllipse(new SolidBrush(selectedColor), g.FillEllipse(new SolidBrush(selectedColor),
imagePoint.X - radius, imagePoint.X - radius,
imagePoint.Y - radius, imagePoint.Y - radius,
_currentBrushSize, adjustedBrushSize,
_currentBrushSize); adjustedBrushSize);
} }
else else
{ {
// 绘制连线 // 绘制连线
g.DrawLine(pen, _lastDrawPoint, imagePoint); g.DrawLine(pen, _lastDrawPoint, imagePoint);
// 更新上一个点 // 更新上一个点