Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Понятно о Visual Basic.NET. Самоучитель.Ч2.2005...docx
Скачиваний:
46
Добавлен:
25.11.2019
Размер:
4.02 Mб
Скачать
      1. Метод DrawImage и его варианты

Вот программа:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim Гр As Graphics = Me.CreateGraphics

Dim Фото As New Bitmap("Spacescape.JPG")

Dim Т As New Point(30, 10)

Dim П1 As New Rectangle(550, 10, 150, 130)

Dim П2 As New Rectangle(550, 160, 200, 70)

Dim П3 As New Rectangle(550, 250, 200, 150)

Dim П4 As New Rectangle(800, 170, 400, 300)

Гр.DrawImage(Фото, Т) 'Точка Т задает левый верхний угол картинки

Гр.DrawImage(Фото, П1) 'Втискиваем картинку в прямоугольник П1

Гр.DrawImage(Фото, П2) 'Втискиваем картинку в прямоугольник П2

'Вырезаем из картинки прямоугольник П4 и втискиваем его в прямоугольник П3:

Гр.DrawImage(Фото, П3, П4, GraphicsUnit.Pixel)

End Sub

Вот результат ее работы (Рис. 12 .50).

Рис. 12.50

Пояснения. Я уже говорил, что у структур, как и у классов, есть конструкторы. Четыре параметра у конструктора прямоугольника – это его главные свойства X, Y, Width и Height.

Из трех десятков вариантов DrawImage я использовал три. Оператор

Гр.DrawImage(Фото, Т) 'Точка Т задает левый верхний угол картинки

рисует ту картинку, что на рисунке слева, с левым верхним углом в указанной точке.

Операторы

Гр.DrawImage(Фото, П1) 'Втискиваем картинку в прямоугольник П1

Гр.DrawImage(Фото, П2) 'Втискиваем картинку в прямоугольник П2

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

Оператор

Гр.DrawImage(Фото, П3, П4, GraphicsUnit.Pixel)

вырезает из картинки прямоугольник П4 и умещает его в прямоугольник П3 на форме. Будьте внимательны насчет единиц измерения размеров в прямоугольнике П4. Прежде всего, четвертым параметром метода мы указали GraphicsUnit.Pixel. Это значит, что единицей измерения для прямоугольника П4 мы выбрали пиксель в объекте Фото. Не путайте пиксели на форме и экране с пикселями в невидимых объектах Bitmap. Не удивительно, что прямоугольник П4 я задаю с очень большими величинами параметров, ведь измеряются они в этих самых невидимых пикселях.

      1. Метод RotateFlip объекта Bitmap

Метод RotateFlip позволяет поворачивать (Rotate) и зеркально отражать (Flip) картинку в памяти.

Вот программа:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim Гр As Graphics = Me.CreateGraphics

Dim Фото As New Bitmap("Spacescape.JPG")

Фото.RotateFlip(RotateFlipType.Rotate90FlipNone) 'Повернули по часовой на 90 град, не отражали

Гр.DrawImage(Фото, 0, 0)

Фото.RotateFlip(RotateFlipType.RotateNoneFlipY) 'Отразили по вертикали, не поворачивали

Гр.DrawImage(Фото, 400, 0)

End Sub

Вот результат ее работы (Рис. 12 .51).

Рис. 12.51

Пояснения. У метода RotateFlip всего один параметр. Как только вы раскроете скобку, VB предложит вам все 16 возможных значений этого параметра. Они являются значениями перечисления RotateFlipType. В смысле всех 16 легко разобраться на 4 нижеприведенных примерах. Нужно только знать, что Rotate переводится «вращай по часовой стрелке», Flip переводится «зеркально отражай», None переводится «не надо»:

RotateNoneFlipX

Вращать не надо, отражай по горизонтали

Rotate180FlipNone

Вращай на 180 градусов, отражать не надо

Rotate90FlipY

Вращай на 90 градусов, после чего отрази по вертикали

Rotate270FlipXY

Вращай на 270 градусов, после чего отрази по горизонтали и вертикали

Посмотрим на программу. Оператор

Фото.RotateFlip(RotateFlipType.Rotate90FlipNone) 'Повернули по часовой на 90 град, не отражали

поворачивает картинку в объекте Фото. Она так и остается там повернутой. Но мы этого пока не видим. Чтобы увидеть ее на форме, применяем следующий оператор:

Гр.DrawImage(Фото, 0, 0)

Это и есть картинка в левой части Рис. 12 .51. Она действительно повернута по сравнению с исходной ориентацией, которую мы можем видеть на Рис. 12 .50. Далее оператор

Фото.RotateFlip(RotateFlipType.RotateNoneFlipY) 'Отразили по вертикали, не поворачивали

отражает по вертикали уже повернутую картинку в объекте Фото, после чего следующий оператор показывает ее нам в правой части рисунка..