Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР 2 Языки программирования академ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
319.49 Кб
Скачать

2.2.3. Кисти типа TextureBrush

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

Для создания кисти класса TextureBrush приложение может воспользоваться одним из следующих конструкторов:

public TextureBrush(Image);

public TextureBrush(Image, Rectangle);

public TextureBrush(Image, RectangleF);

public TextureBrush(Image, WrapMode);

public TextureBrush(Image, Rectangle, ImageAttributes);

public TextureBrush(Image, WrapMode, Rectangle);

public TextureBrush(Image, WrapMode, RectangleF);

Самому простому из этих конструкторов нужно передать изображение, загруженное из ресурсов приложения или из внешнего файла. Структуры Rectangle и RectangleF позволяют задать границы прямоугольной области, ограничивающие изображение кисти. С помощью констант перечисления WrapMode программа может задать способ размещения текстуры по горизонтали и вертикали. Эти константы приведены в таблице.

Константа

Описание

Clamp

Текстура кисти «прикрепляется» к границе объекта

Tile

При закраске текстура кисти повторяется по вертикали и горизонтали

TileFlipX

Аналогично предыдущему, но изображение в соседних столбцах заменяется зеркальным, отражаясь по вертикали

TileFlipY

Аналогично Tile, но отражение происходит по горизонтали

TileFlipXY

Отражение и по вертикали и по горизонтали

И, наконец, параметр ImageAttributes позволяет задать различные атрибуты изображения, такие, как количество цветов и способ рисования. Описание этого параметра и класса ImageAttributes можно найти в электронной справочной документации системы Microsoft Visual Studio .NET.

Закраску с помощью текстурной продемонстрировано в приведенном ниже коде:

private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

Image myBrushImage = new Bitmap(GetType(), "L_GREY.GIF");

TextureBrush tb = new TextureBrush(myBrushImage);

g.FillRectangle(tb, 10, 30, 200, 100);

g.DrawRectangle(new Pen(Brushes.DarkBlue,2),10,30,200,100);

}

После получения контекста устройства создается новое изображение класса Image, загружаемое из ресурсов приложения:

Image myBrushImage = new Bitmap(GetType(), "L_GREY.GIF");

Обратите внимание, что мы создаем объект класса Bitmap, а полученную в результате ссылку присваиваем объекту класса Image. Предполагается, что перед трансляцией приложения вы скопировали файл текстуры L_GREY.GIF в ресурсы приложения, а также установили значение свойства Build Action для файла изображения, равное Embedded Resource. Результат закраски прямоугольной области текстурной кистью показан на рисунке 2.2.

Рис. 2.2 – Закрашивание прямоугольника кистью типа TextureBrush

2.2.4. Градиентные кисти

Приложениям GDI+ доступен еще один вид кистей  так называемые градиентные кисти. Линейная градиентная кисть LinearGradientBrush позволяет задать в кисти переход от одного цвета к другому. Кисти с множественным градиентом PathGradientBrush позволяют задать внутри кисти область, которая будет закрашена с использованием цветового градиента.

Рассмотрим фрагмент кода, демонстрирующего возможности закрашивания при помощи градиентной кисти:

private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

Rectangle rect = new Rectangle(10, 10, 50, 50);

LinearGradientBrush gb = new LinearGradientBrush(rect, Color.White, Color.Black, LinearGradientMode.BackwardDiagonal);

g.FillRectangle(gb, 10, 30, 200, 100);

g.DrawRectangle(new Pen(Brushes.DarkBlue, 2),10,30,200,100);

}

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

Результат работы данного приложения представлен на рисунке 2.3.

Рис. 2.3 – Закрашивание прямоугольника линейной градиентной кистью

В таблице приведены возможные значения перечисления LinearGradientMode.

Константа

Описание

Horizontal

Слева направо

Vertical

Сверху вниз

ForvardDiagonal

По диагонали из верхнего левого угла в нижний правый угол

BackwardDiagonal

По диагонали из верхнего правого угла в нижний левый угол

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]