在保持给定比例的同时用鼠标绘制矩形

时间:2019-02-09 10:16:36

标签: vb.net graphics

我有一个我认为是一个基本的问题,我不得不挠头。

我希望能够在窗体上绘制一个矩形,同时将其限制为给定的比例。与Photoshop的裁剪工具类似。

我可以使用比率正确缩放图像,但是在将公式应用于“实时”绘制的矩形时遇到麻烦。

这是绘制所述矩形的基本工作代码。

Public Class Form2

Dim mRect As Rectangle

Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
mRect = New Rectangle(e.X, e.Y, 0, 0)
Me.Invalidate()
End Sub

Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
mRect = New Rectangle(mRect.Left, mRect.Top, e.X - mRect.Left, e.Y - mRect.Top)
Me.Invalidate()
End If
End sub

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Using pen As New Pen(Color.Red, 3)
e.Graphics.DrawRectangle(pen, mRect)
End Using

End class

上面的代码可以很好地绘制自由形式的矩形。我只是不确定在哪里或如何应用公式以确保绘制的矩形始终遵循给定的比率,例如1.5

任何帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:1)

尝试一下;

 Dim mRect As Rectangle

 Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
     mRect = New Rectangle(e.X, e.Y, 0, 0)
     Me.Invalidate()
 End Sub

 Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
     If e.Button = Windows.Forms.MouseButtons.Left Then
         mRect = New Rectangle(mRect.Left, mRect.Top, e.X - mRect.Left, e.Y - mRect.Top)
         'Replace 1.5 with the scale you want to use
         Dim hgt As Integer = Convert.ToInt32(mRect.Height/1.5)
         Dim wdth As Integer = Convert.ToInt32(mRect.Width/1.5)
         mRect.Size = New Size(wdth*1.5, hgt*1.5)
         Me.Invalidate()
     End If
 End sub

 Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
     Using pen As New Pen(Color.Red, 3)
         e.Graphics.DrawRectangle(pen, mRect)
     End Using
 End class