【发布时间】:2021-07-08 10:15:09
【问题描述】:
我有一个程序,我可以用鼠标在四个方向中任意一个方向绘制一个矩形。
这些矩形在图片框上用于裁剪图像的一部分。
绘制这些矩形时必须保持给定尺寸的比例,例如 320 x 200。
我希望此工具的行为与 Photoshop 中的裁剪工具非常相似,或者类似于此处的裁剪示例: https://imageresize.org/
我的大部分元素都能正常工作,我只是在一些几何计算上苦苦挣扎。
请参阅我的代码中的“右下角”示例。这非常有效,基本上我只想将这个确切的公式应用于其他方向。
我已经玩了几个小时不同的计算,但我似乎无法解决。
这是工作代码:
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
'Draw rectangle keeping aspect ratio
If e.Button = Windows.Forms.MouseButtons.Left Then
If e.X > startPos.X And e.Y > startPos.Y Then
'Bottom right
mRect = New Rectangle(mRect.Left, mRect.Top, e.X - mRect.Left, e.Y - mRect.Top)
mRect.Size = New Size(mRect.Width, mRect.Width / Ratio.Text)
If e.Y < mRect.Bottom Then
mRect = Rectangle.FromLTRB(startPos.X, startPos.Y, e.X, e.Y)
mRect.Size = New Size(mRect.Height * Ratio.Text, mRect.Height)
End If
Me.Invalidate()
ElseIf e.X < startPos.X And e.Y > startPos.Y Then
'Bottom left
mRect = New Rectangle(e.X, startPos.Y, startPos.X - e.X, e.Y - startPos.Y)
mRect.Size = New Size(mRect.Width, mRect.Width / Ratio.Text)
Me.Invalidate()
ElseIf e.X > startPos.X And e.Y < startPos.Y Then
'Top right
mRect = New Rectangle(startPos.X, e.Y, e.X - startPos.X, startPos.Y - e.Y)
mRect.Size = New Size(mRect.Height * 1.6, mRect.Height)
Me.Invalidate()
ElseIf e.X < startPos.X And e.Y < startPos.Y Then
'Top left
mRect = New Rectangle(e.X, e.Y, startPos.X - e.X, startPos.Y - e.Y)
mRect.Size = New Size(mRect.Width, mRect.Width / Ratio.Text)
Me.Invalidate()
End If
End If
End Sub
任何帮助将不胜感激。谢谢!
以下是目前的工作方式,您可以看到在西北地区绘图时情况变得很时髦。对于所有象限,我需要获得与东南部(或代码右下角)相同的行为。
【问题讨论】:
标签: vb.net winforms graphics geometry