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

Создаем собственные кисти


До этого момента для рисования закрашенных фигур мы пользовались стандартными кистями из класса Brushes. Однако, собственные кисти гораздо богаче возможностями, чем стандартные. Собственные объекты-кисти, как мы уже предвидим, нужно будет создавать из специального класса, подобно тому, как мы создавали из класса Pen объекты-перья. Что же это за класс? Он не один, их несколько, точнее – 5. Каждый из них обеспечивает создание кистей определенного вида. Наряду с термином «кисть» мы будем употреблять термин заливка с тем же смыслом, поэтому можно сказать, что каждый класс обеспечивает фигурам заливку (закраску) определенного вида.

Вот эти классы с указанием пространств имен:

System.Drawing.SolidBrush

Обычная сплошная простая заливка

System.Drawing.Drawing2D.LinearGradientBrush

Линейный градиент, то есть плавный переход между двумя цветами



System.Drawing.Drawing2D.PathGradientBrush

Нелинейный градиент

System.Drawing.TextureBrush

Текстурная заливка

System.Drawing.Drawing2D.HatchBrush

Штрихованная заливка

Существует также специальный класс Brush (не путать с Brushes), но от него объекты-кисти образовывать нельзя, у него другая роль.

Сплошная кисть – SolidBrush. Собственная сплошная кисть нам не очень интересна, так как не богаче стандартной из класса Brushes. Покажу все же, как ее создавать:

        Dim Кисть As SolidBrush

= New SolidBrush(Color.Blue)

Теперь все равно, что писать в программе:  Кисть   или   Brushes.Blue.

Создав однажды Кисть, вы затем свободно можете менять ее цвет, задавая ее свойство Color:

        Кисть.Color = Color.Brown

Градиентная кисть – LinearGradientBrush. Поставим задачу нарисовать маленький эллипс, такой, как в правой части Рис. 12.5.

Рис. 12.5

Вы видите, что его заливка не однородная, а меняется от красного к желтому. Для этого используется так называемая градиентная заливка (кисть) или точнее – линейная градиентная заливка (LinearGradientBrush). Вот как она работает. Чтобы было удобнее объяснять, я нарисовал еще и большой полосатый эллипс, нарисованный той же кистью.


Зададим на поверхности произвольную точку, где цвет должен быть абсолютно красным. Назовем ее Т1. Зададим другую произвольную точку, где цвет должен быть абсолютно желтым. Назовем ее Т2. Мысленно соединим две эти точки отрезком прямой (на рисунке этот отрезок показан черной линией). Вдоль этого отрезка цвет постепенно меняется от абсолютно красного к абсолютно желтому. Вся заливаемая поверхность покрыта этим изменяющимся цветом так, что любая воображаемая прямая, перпендикулярная данному отрезку, состоит из точек одного цвета. Способ заливки  хорошо виден на рисунке: как только кисть дойдет до абсолютно желтого цвета, она вновь начинает с красного. Получается матрас.
Произвольно задавая положение точек Т1 и Т2, мы можем как угодно регулировать направление градиента (изменения) цвета и расстояние между полосами матраса.
Вот какая программа понадобилась для этого рисунка:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Гр As Graphics = Me.CreateGraphics
        Dim Т1 As New Point(220, 50)
        Dim Т2 As New Point(350, 150)
        Dim П As New Rectangle(10, 30, 530, 200)
        'Создаем градиентную кисть:
        Dim Кисть_град As New System.Drawing.Drawing2D.LinearGradientBrush(Т1, Т2, Color.Red, Color.Yellow)
        Гр.FillEllipse(Кисть_град, П)                                        'Рисуем большой эллипс
        Гр.DrawLine(Pens.Black, Т1, Т2)                                 'Рисуем отрезок
        Гр.FillEllipse(Кисть_град, 450, 10, 180, 50)       'Рисуем маленький эллипс
End Sub
Пояснения. Здесь я использовал простейший вариант создания градиентной кисти с 4 параметрами: первая точка, вторая точка, один цвет, другой цвет. Есть и другие, например, с указанием угла.
Штрихованная кисть – HatchBrush. Фигуры можно заливать не только цветом, но и разными штриховками, например, такой, как на Рис. 12.6.

Рис. 12.6
Для этого используется так называемая штрихованная кисть (HatchBrush).
Прежде чем писать программу, позаботимся об экономии чернил. Поскольку HatchBrush принадлежит к пространству имен с очень длинным именем System.Drawing.Drawing2D, сделаем так, чтобы VB не утомлял нас им. Для этого (вспомните 2.2.3) самой первой строкой в окне кода напишем
Imports System.Drawing.Drawing2D
С учетом этой строки вот какой фрагмент понадобился для этого рисунка:
        Dim Кисть_штрих As New HatchBrush(HatchStyle.BackwardDiagonal, Color.Blue, Color.Yellow)
        Гр.FillEllipse(Кисть_штрих, 10, 50, 530, 200)
Пояснения. Самый первый параметр конструктора штрихованной кисти – HatchStyle – тип штриховки. На выбор вам будет предложено несколько десятков типов. Второй параметр – цвет штриха, третий (в 1 варианте конструктора он не указывается) – цвет фона.
Рассмотрение текстурной кисти отложим до 12.6. Кисть с нелинейным градиентом рассматривать не будем.

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