Интересно то, что на основе кисти вы можете создать пользовательский тип Pen. Подобным образом вы можете создать себе любую подходящую кисть (кисть, которая "рисует" точечное изображение) и выполнять визуализацию заданных геометрических шаблонов с помощью сконфигурированного объекта Pen. Для примера рассмотрите следующий вариант программы, в котором используются различные кисти.
private void MainForm_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
// Создание SolidBrush синего цвета
SolidBrush blueBrush = new SolidBrush(Color.Blue);
// Получение готовой кисти из типа Brushes.
SolidBrush pen2 = (SolidBrush)Brushes.Firebrick;
// Визуализация некоторых шаблонов.
g.FillEllipse(blueBrush, 10, 10, 100, 100);
g.FillPie(Brushes.Black, 150, 10, 120, 150, 90, 80);
// Рисование пурпурного полигона…
SolidBrush brush3= new SolidBrush(Color.Purple);
g.FillPolygon(brush3, new Point[]{ new Point(30, 140), new Point(265, 200), new Point(100, 225), new Point(190, 190), new Point(50, 330), new Point(20, 180) });
// … и прямоугольника, содержащего текст…
Rectangle r = new Rectangle(150, 10, 130, 60);
g.FillRectangle(Brushes.Blue, r);
g.DrawString("Эй, вы, там, наверху!… Я вам привет передаю.", new Font("Arial", 11), Brushes.White, r);
}
Надеюсь, вы согласитесь, что это приложение почти идентично созданной выше программе CustomPenApp, но использует методы FillXXX и типы SolidBrush вместо перьев и соответствующим им методов DrawXXX. На рис. 20.14 показан соответствующий вывод.
Исходный код. Проект SolidBrushApp размещен в подкаталоге, соответствующем главе 20.
Рис. 20.14. Работа с типами Brush
Работа с HatchBrush
В пространстве имен System.Drawing.Drawing2D определен производный от Brush тип с именем HatchBrush. Этот тип позволяет закрасить регион, используя один из (очень большого) набора встроенных видов узоров, представленных перечнем HatchStyle. Вот часть соответствующего списка имен.
public enum HatchStyle {
Horizontal, Vertical, ForwardDiagonal,
BackwardDiagonal, Cross, DiagonalCross,
LightUpwardDiagonal, DarkDownwardDiagonal,
DarkUpwardDiagonal, LightVertical,
NarrowHorizontal, DashedDownwardDiagonal,
SmallConfetti, LargeConfetti, ZigZag,
Wave, DiagonalВrick, Divot, DottedGrid, Sphere,
OutlinedDiamond, SolidDiamond,
…
}
При конструировании HatchBrush вы должны указать цвет для переднего плана и цвет для фона, которые будут использоваться при выполнении операции закрашивания. Для примера давайте немного подкорректируем программную логику из приведенного выше примера PenCapApp.
private void MainForm_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
int yOffSet = 10;
// Получение всех членов перечня HatchStyle.
Array obj = Enum.GetValues(typeof(HatchStyle));
// Отображение овалов для первых 5 значений из HatchStyle.
for (int x = 0; x ‹ 5; x++) {
// Конфигурация кисти.
HatchStyle temp = (HatchStyle)obj.GetValue(x);
HatchBrush theBrush = new HatchBrush(temp, Color.White, Color.Black);
// Вывод имени из перечня HatchStyle.
g.DrawString(temp.ToString, new Font (''Times New Roman", 10), Brushes.Black, 0, yOffSet);
// Закраска объекта подходящей кистью.
g.FillEllipse(theBrush, 150, yOffSet, 200, 25);
yOffSet += 40;