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

Текстурная кисть


Текстурной кистью называют такой способ заливки фигур, когда они вместо цвета или штрихового узора заполняются бесконечно повторяющейся картинкой, взятой вами из графического файла (см. Рис. 12.17).

Рис. 12.17

На этом рисунке эллипс заполнен квадратной картинкой, повторяющейся на нем полтора десятка раз. Создает такую заливку следующая программа:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim Текстура As New Bitmap("Дверь.jpg")

        Dim Кисть_текстурная As New TextureBrush(Текстура)

        Dim Гр As Graphics = Me.CreateGraphics

        Гр.FillEllipse(Кисть_текстурная, 10, 50, 1200, 900)

End Sub

Пояснения. Конструктор текстурной кисти (вторая строка) может сконструировать ее только из объекта типа Image, содержащего подходящую картинку. Поэтому первой строкой я создал такой объект с именем Текстура. Последние две строки рисуют на форме эллипс, заполненный этой текстурой.

Большинство вариантов конструктора позволяют использовать для кисти не всю картинку, а вырезанный из нее прямоугольник. Если вы знаете размер картинки в пикселях, то можете этим воспользоваться:

        Dim Текстура As New Bitmap("Дверь.jpg")



        Dim П As New Rectangle(200, 100, 40, 70)

        Dim Кисть_текстурная As New TextureBrush(Текстура, П)

Здесь я заранее знаю размер картинки в объекте Bitmap – 256 на 256. Из нее я вырезал прямоугольник с левым верхним углом в точке (200, 100) относительно левого верхнего угла картинки и с размерами 40 на 70. Этот прямоугольный фрагмент и стал новой картинкой для кисти. Если вы «залезете» вырезаемым прямоугольником за край исходной картинки, VB выдаст ошибку.

Несколько вариантов конструктора позволяют управлять ориентацией картинки в текстурной заливке и создавать простейшие комбинации с использованием этой картинки в разных ориентациях (см. например, Рис. 12.18).

Рис. 12.18

Для этого используется параметр конструктора WrapMode. Это перечисление из пространства имен System.Drawing.Drawing2D. Оно имеет несколько значений, определяющих форму комбинации. Одно из них – TileFlipXY –  использовано в программе, создающей этот рисунок  

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Dim Картинка As New Bitmap("DIME.WMF")

        Dim Текстура As New Bitmap(Картинка, 100, 100)

        Dim Кисть_текстурн As New TextureBrush(Текстура, System.Drawing.Drawing2D.WrapMode.TileFlipXY)

        Dim Гр As Graphics = Me.CreateGraphics

        Гр.FillEllipse(Кисть_текстурн, 10, 10, 900, 600)

End Sub

Пояснения. Здесь я сначала, как положено, создал объект Bitmap для картинки, но поскольку картинка получилась слишком большая, я следующим оператором уменьшил ее до размеров 100 на 100. Следующий оператор из полученной картинки создает текстурную кисть с комбинацией TileFlipXY.



Содержание раздела