ПОНЯТНО О Visual Basic NET (том 3)




Проект – Графический редактор - часть 3


Открывать можно графические файлы разных форматов. Сохранять – только в формате BMP. Чтобы сохранять в некоторых других форматах, нужен метод Save с двумя параметрами (см. 12.3.7).

Пишем компактнее. Процедуры сохранения и открытия можно записать покомпактнее, отказавшись от переменных Файл и  Картинка и заменив эти переменные их значениями. Заодно и предусмотрим досрочный выход из диалогов:

Private Sub Сохранить(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Сохранить.Click

        If SaveFileDialog1.ShowDialog() = DialogResult.Cancel Then Exit Sub

        Лист.Save(SaveFileDialog1.FileName)

End Sub

Private Sub Открыть(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Открыть.Click

        If OpenFileDialog1.ShowDialog() = DialogResult.Cancel Then Exit Sub

        Гр.DrawImage(New Bitmap(OpenFileDialog1.FileName), 10, 10)

        Граф.DrawImage(New Bitmap(OpenFileDialog1.FileName), 10, 10)

End Sub

Улучшаем рисование мышкой. У нашей процедуры рисования Form1_MouseMove есть существенный недостаток: Она рисует, по сути, не линию, а последовательность кружочков, которые сливаются в линию только при медленном движении мышки. Происходит это потому, что события MouseMove вырабатываются не непрерывно, а через некоторые, пусть небольшие, промежутки времени.

Попробуем вместо точек рисовать отрезки прямых, соединяющие между собой  точки, в которых наступали соседние события MouseMove. Получится ломаная линия, но поскольку соседние точки расположены очень близко друг к другу, она будет неотличима от плавной, гладкой кривой.

Теперь, когда мы рисуем отрезки, нам вместо кисти понадобится перо.

Вот как дополнится и изменится наша программа:

Dim Перо As New Pen(Color.Black, 3)       'Цвет карандаша поначалу черный, толщина=3

'Координаты мыши при предыдущем (перед текущим) наступлении события MouseMove:

Dim X_предыдущее As Long

Dim Y_предыдущее As Long

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load




Содержание  Назад  Вперед