- •1. Цель работы
- •2. Краткая теория
- •2.1. Работа с перьями
- •2.2. Работа с кистью
- •2.2.1. Кисть для сплошной закраски
- •2.2.2. Кисти типа HatchBrush
- •2.2.3. Кисти типа TextureBrush
- •2.2.4. Градиентные кисти
- •2.3. Проверка попадания в область изображения
- •2.4. Проверка попадания в область, отличную от прямоугольной
- •2.5. Определение цветовых значений
- •2.6. Стандартное диалоговое окно выбора цвета
- •3. Пример выполнения работы
- •3.1. Визуальное проектирование диалогового окна
- •3.2. Проектирование программного кода
- •3.2.1. Начальное рисование фигуры
- •3.2.2. Реализация движения фигуры
- •3.2.3. Программная реализация «отскакивания от стенок»
- •3.2.4. Изменение скорости движения круга
- •3.2.5. Создание диалоговой панели выбора цвета заливки
- •3.2.6. Создание свойства для получения цвета
- •3.2.7. Проверка попадания курсора мыши внутрь круга
- •If (прямоугольник.Contains(точка_курсора))
- •3.2.8. Изменение цвета круга
- •4. Варианты заданий для самостоятельной работы
2.2. Работа с кистью
Внутренняя область окна и замкнутых геометрических фигур может быть закрашена при помощи кисти. В приложениях Мiсrosоft .NEТ Framework кисти создаются на базе классов, производных от абстрактного класса Brush. Это следующие классы:
-Brushes;
-SolidBrush;
-HatchBrush;
-TextureBrush;
-LinearGradientBrush;
-PathGradientBrush.
2.2.1. Кисть для сплошной закраски
Простейшие из кистей - это кисти Brushes и SolidBrush, предназначенные для сплошной закраски фигур. Эти кисти создаются при помощи конструктора с одним параметром, задающим цвет в виде объекта класса Color.
Ниже приведена часть приложения, в котором кисть класса Brushes применяется для создания перьев, с помощью которых приложение рисует прямоугольник и эллипс. Кроме этого, кисть черного цвета создается и для рисования текста:
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.Clear(Color.White);
g.DrawString(Text,new Font("Helvetica",12),Brushes.Black,0,0);
g.DrawRectangle(new Pen(Brushes.Black, 2), 10, 30, 200,100);
g.DrawEllipse(new Pen(Brushes.Black, 2), 150, 120, 100,130);
}
2.2.2. Кисти типа HatchBrush
При помощи класса НаtchBrush можно создать прямоугольную кисть заданного стиля с заданным цветом изображения и фона.
Для создания кистей этого типа предусмотрено 2 конструктора:
public HatchBrush(HatchStyle, Color);
public HatchBrush(HatchSty1e, Color, Color);
Первый из этих конструкторов позволяет создать кисть заданного стиля и цвета, а второй дополнительно позволяет указать цвет фона.
Далее в таблице перечислены различные стили кисти HatchBrush, представляющие собой константы перечисления HatchStyle.
Константы |
Описание |
BackwardDiagonal |
Линии штриховки располагаются в обратном направлении (от верхнего правого угла к нижнему левому углу кисти) |
Cross |
Пересекающиеся горизонтальные и вертикальные линии |
DarkDownwardDiagonal |
Диагональные линии, идущие в направлении снизу вверх, и расположенные на 50 % плотнее, чем при использовании константы ForwardDiagonal (темная штриховка) |
DarkHorizontal |
Горизонтальные линии, которые на 50 % плотнее, чем при использовании константы Horizontal (темная штриховка) |
DarkUpwardDiagonal |
Диагональные линии, плотнее на 50 % чем при использовании константы BackwardDiagonal (темная штриховка) |
DarkVertical |
Вертикальные линии, которые на 50 % плотнее, чем при использовании константы Vertical (темная штриховка) |
DashedDownwardDiagonal |
Штриховые диагональные линии, идущие в обратном направлении |
DashedHorizontal |
Штриховые горизонтальные линии |
DashedUpwardDiagonal |
Штриховые диагональные линии, идущие в прямом направлении |
DashedVertical |
Штриховые вертикальные линии |
DiagonalBrick |
Диагональная «кирпичная» штриховка |
DiagonalCross |
Пересекающиеся прямые и обратные диагональные линии |
Divot |
Штриховка в виде дерна |
DottedDiamond |
Прямые и обратные диагональные пересекающиеся линии, состоящие из отдельных точек |
DottedGrid |
Горизонтальные и вертикальные пересекающиеся линии, состоящие из отдельных точек |
ForwardDiagonal |
Прямые диагональные линии, идущие в направлении от верхнего левого угла к нижнему правому углу кисти |
Horizontal |
Горизонтальные линии |
HorizontalBrick |
Горизонтальные «кирпичные» линии |
LargeCheckerBoard |
Штриховка в виде шахматной доски с крупными клетками |
LargeConfetti |
Штриховка в виде конфетти |
LargeGrid |
Пересекающиеся горизонтальные и вертикальные линии (то же, что и Cross) |
LightDownwardDiagonal |
Светлая обратная диагональная штриховка |
LightHorizontal |
Светлая горизонтальная штриховка |
LightUpwardDiagonal |
Светлая прямая диагональная штриховка |
LightVertical |
Светлая вертикальная штриховка |
Мах |
То же, что и SolidDiamond |
Min |
То же, что и Horizonal |
NarrowHorizontal |
Средняя горизонтальная штриховка |
NarrowVertical |
Средняя вертикальная штриховка |
OutlinedDiamond |
Пересекающиеся прямые и обратные диагональные линии штриховки |
PercentO5, Percentl0, Percent20, РеrсеntЗО ... Percent90 |
Эти константы задают процентное соотношение цвета штриховки и цвета фона кисти |
Plaid |
Штриховка в виде пледа |
Shingle |
«Кровельная» штриховка |
SmallCheckerBoard |
Штриховка в виде шахматной доски с мелкими клетками |
SmallConfetti |
Штриховка в виде мелкого конфетти |
SmallGrid |
Штриховка в виде мелкой сетки |
SolidDiamond |
Штриховка в виде шахматной доски, расположенная по диагонали |
Sphere |
Штриховка с использованием сферических фигур |
Trellis |
Штриховка в виде решетки |
Vertical |
Вертикальные линии |
Wave |
Волнообразные линии |
Weave |
Штриховка в виде ткани |
WideDownwardDiagonal |
Широкие обратные диагональные линии |
WideUpwardDiagonal |
Широкие прямые диагональные линии |
ZigZag |
Зигзагообразные горизонтальные линии |
Для демонстрации использования кистей класса НаtchBrush ниже представлен исходный текст обработчика событий Form1_Paint:
using System.Drawing.Drawing2D;
...
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
HatchBrush hb = new HatchBrush(HatchStyle.Cross, Color.Black, Color.White);
g.FillRectangle(hb, 10, 30, 200, 100);
g.DrawRectangle(new Pen(Brushes.Black,1),10,30,200,100);
HatchBrush hb1 = new HatchBrush(HatchStyle.DottedGrid, Color.Black, Color.YellowGreen);
g.FillEllipse(hb1, 150, 120, 100, 130);
g.DrawEllipse(new Pen(Brushes.Black,1),150,120,100,130);
HatchBrush hb2 = new HatchBrush(HatchStyle.Divot, Color.Tomato, Color.Tan);
g.FillEllipse(hb2, 60,160,60,60);
g.DrawEllipse(new Pen(Brushes.Blue, 2), 60, 160, 60, 60);
}
Как видно, здесь последовательно создаются 3 различные кисти, а затем используются для закраски внутренних областей прямоугольника и эллипсов. Результат работы приложения показан на рисунке 2.1.
Рис. 2.1 – Использование кистей класса НаtchBrush
