13.5. .NET Перья

При рисовании фигур на поверхности Graphics нам придется оперировать двумя понятиями: линия и заливка. Эти понятия чаще всего ассоциируют с карандашом и кистью соответственно. С помощью карандаша мы рисуем линии, а с помощью кисти заполняем пространства (раскрашиваем). Например, линия прямоугольника может быть черного цвета, а внутренность прямоугольника может заполняться другим цветом.

Наверное, каждый графический редактор оперирует этими же двумя понятиями. Откройте, например, графический редактор Paint и посмотрите на панель выбора цвета. Мы работаем сразу с двумя цветами: пера и кисти. Один цвет выбирается левой кнопкой мыши, а другой — правой кнопкой.

За стиль карандаша в .NET отвечает класс Pen. Для иллюстрации самых интересных свойств этого класса я написал небольшой пример, который мы сейчас и рассмотрим (листинг 13.1). В нем несколько линий рисуются различными перьями.

Листинг 13.1. Рисование линий разными перьями

private void Form1_Paint(object sender, PaintEventArgs e)
{
  Color c1 = Color.FromName("Green");
  Pen pen = new Pen(c1, 3);
            
  // стили карандаша
  int x = 10;
  foreach (DashStyle dcp in Enum.GetValues(typeof(DashStyle)))
  {
    pen.DashStyle = dcp;
    e.Graphics.DrawLine(pen, new Point(x, 10), new Point(x, 100));
    x += 10;
  }

  // ваш собственный рисунок
  x += 50;
  pen.DashPattern = new float[] { 5.0F, 1.0F, 2.0F, 4.0F, 1.0F, 10.0F };
  e.Graphics.DrawLine(pen, new Point(x, 10), new Point(x, 100));

  // смещение рисунка
  x += 50;
  for (int i = 0; i < 5; i++)
  {
    pen.DashOffset = i;
    e.Graphics.DrawLine(pen, new Point(x, 10), new Point(x, 100));
    x += 10;
  }
}

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

В первой строке кода создается переменная для хранения цвета. Хотя цвет будет использоваться только во второй строке кода, я решил написать создание цвета явно в отдельной строке. Просто так захотелось.

Во второй строке инициализируется карандаш в виде объекта класса Pen. Конструктор принимает два параметра:

  • цвет будущего карандаша;
  • толщину линии в пикселах.

В качестве толщины я выбрал троечку, чтобы линии было лучше видно.

Далее идут три блока кода, которые отделены не только пустой строкой и комментарием, но и смыслом выполняемых действий. В первом блоке кода с помощью цикла foreach перебираются все значения перечисления DashStyle. Одноименное свойство есть у карандаша, и оно отвечает за стиль линии. Существуют шесть стилей: Solid, Dash, Dot, DashDot, DashDotDot, Custom, и соответствующие шесть линий вы можете увидеть на рис. 13.1, слева. Обратите внимание, что 5-я и 6-я линии одинаковы. Это потому, что Custom не имеет стиля, но вместо этого позволяет пользователю задавать свой стиль, что и происходит во втором блоке кода примера.

Итак, второй блок создает свой стиль. Это делается через свойство DashPattern, которое имеет тип массива значений float. Каждое значение в этом массиве — это значение длины линии и пробела поочередно. Это значит, что первое число задает длину линии, второе — длину пробела, потом опять линии и т. д. Таким образом, вы можете создать свой собственный рисунок линии.

Последний блок кода рисует пять линий в цикле, постепенно увеличивая свойство DashOffset. Это свойство отвечает за смещение в линии, начиная с которого будет создаваться рисунок карандаша. Мне сложно передать словами смысл смещения — лучше всего это передают последние пять линий на рисунке.

Предыдущая глава

13.4. Цвета .NET

Следующая глава

13.6. Кисти Brush в .NET

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне