Я разрабатываю программу, которая будет иметь некоторые из тех же функций, что и MS Paint в VB.NET. Следующий код позволяет мне успешно щелкнуть и перетащить, чтобы нарисовать прямоугольник выделения на кадре, но он кажется лагги (особенно по сравнению с самой MS Paint). Есть ли более эффективный способ сделать это?Есть ли более быстрый способ рисовать динамические прямоугольники в VB?
Public DrawCapture As Boolean = False
Public DrawCaptureOrigin As Point
Public DrawCaptureRectangle As Rectangle
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
DrawCapture = True
DrawCaptureOrigin = e.Location
DrawCaptureRectangle = New Rectangle(e.Location, New Point(1, 1))
End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
Dim curX As Integer = e.Location.X, curY As Integer = e.Location.Y
Dim dcoX As Integer = DrawCaptureOrigin.X, dcoY As Integer = DrawCaptureOrigin.Y
If DrawCapture Then
If curX < dcoX And curY < dcoY Then
DrawCaptureRectangle = New Rectangle(curX, curY, dcoX - curX, dcoY - curY)
ElseIf curX < dcoX Then
DrawCaptureRectangle = New Rectangle(curX, dcoY, dcoX - curX, curY - dcoY)
ElseIf curY < dcoY Then
DrawCaptureRectangle = New Rectangle(dcoX, curY, curX - dcoX, dcoY - curY)
Else
DrawCaptureRectangle = New Rectangle(dcoX, dcoY, curX - dcoX, curY - dcoY)
End If
PictureBox1.Invalidate()
End If
End Sub
Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
DrawCapture = False
PictureBox1.Invalidate()
End Sub
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
If DrawCaptureRectangle.Width > 0 Then
e.Graphics.DrawRectangle(Pens.Black, DrawCaptureRectangle)
End If
End Sub
Вероятная скорость/лаг виновником является 'PictureBox'.IIrc, «PictureBox» - это просто изображение «Bitmap», которое завернуто в элемент управления. Чтобы ускорить его до приличного уровня, вам, скорее всего, придется использовать графический API, который по своей природе быстрее. То есть MDX, XNA, SlimDX и т. Д. –
Спасибо EBrown. Я никогда не использовал их; есть ли, в частности, что вы могли бы рекомендовать для воссоздания MS Paint? – RapierMother
Я бы начал с изучения чего-то вроде SlimDX, SFML или подобного. Я не помню сразу, но я думаю, что у них есть элементы управления, которые вы можете перетащить в окно Windows Form/WPF. –