Нарисуйте прямоугольник мышью, сохраняя заданное соотношение - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть то, что я считаю основной проблемой, которая заставляет меня чесать голову.

Я хочу иметь возможность рисовать прямоугольник на моей форме, ограничивая его определенным соотношением.Аналогично тому, как работает инструмент кадрирования в 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 голосов
/ 09 февраля 2019

Попробуйте это;

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...