Динамическая прорисовка линий.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

all7
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 05.12.2008 (Пт) 23:30

Динамическая прорисовка линий.

Сообщение all7 » 05.12.2008 (Пт) 23:55

Здравствуйте, у меня довольно нубский вопрос, ну да ладно. Имеется программа, выводящая определенную графику, записанную в объект bitmap. Пользователь дополняет эту графику линиями. Прежде чем записать новую линию в bitmap, ее нужно динамически отобржать на экране (вобщем как в пейнте). Т.е. при каждом движении мыши создаем новую линию и удаляем старую. Проблема как раз с удалением старой линии: пробовал обновлять графическую область методом Refresh(), - получил 100% загрузку процессора (ресурсов не хватает на некоторые дополнительные расчеты); пробовал Invalidate() - загрузка все равно довольно высокая (но уже лучше) и созданная линия исчезает, стоит только мыши остановиться. Может подскажите как решить проблему?

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Динамическая прорисовка линий.

Сообщение Joo » 06.12.2008 (Сб) 10:29

all7 писал(а):Здравствуйте... бла-бла-бла... Прежде чем записать новую линию в bitmap, ее нужно динамически отобржать на экране (вобщем как в пейнте)... бла-бла... Может подскажите как решить проблему?


Попробуй так:
Код: Выделить всё
Public Class Form1
    Private PointStart As Point = Point.Empty
    Private PointEnd As Point = Point.Empty
    Private bmp As Bitmap = New Bitmap(500, 500)

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.DoubleBuffered = True
        Me.Size = New Size(500, 500)
    End Sub

    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
        PointStart = e.Location
    End Sub

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        If PointStart = Point.Empty Then Exit Sub
        If PointEnd <> e.Location Then
            PointEnd = e.Location
            Me.Invalidate()
        End If
    End Sub

    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
        Using g As Graphics = Graphics.FromImage(bmp)
            g.DrawLine(Pens.Red, PointStart, PointEnd)
        End Using
        Me.BackgroundImage = bmp
        PointStart = Point.Empty
        PointEnd = Point.Empty
    End Sub

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        If PointStart = Point.Empty Then Exit Sub
        e.Graphics.DrawLine(Pens.Red, PointStart, PointEnd)
    End Sub
End Class
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 89

    TopList