Что такое кисть (Brush)?
Кисть (Brush) – это еще один инструмент рисования, с помощью которого происходит заливка (закраска) фигур. Как и для перьев, существует перечисление «системных кистей» Brushes, название кисти в котором определяется названием цвета. Так определяются кисти, производящие закраску сплошным цветом. Сплошную кисть можно создать с помощью класса SolidBrush. При этом требуется задать только цвет:
Рис 13. Использование стандартной кисти Brushes::Red.
Как сделать нестандартную закраску фигуры (картинкой, переливающимся цветом и пр.)?
В пространстве имен System.Drawing.Drawing2D есть еще несколько классов для создания кисти, которые используют узор, градиентную заливку, изображение.
Например, кисть с узором (HatchBrush) создается с указанием вида узора (перечисление HatchStyle), цвета узора и цвета фона:
HatchBrush^ br = gcnew
Здесь была задана кисть, которая на желтом фоне красным цветом рисует узор «решетка».
Рис 14. Использование кисти-узора.
Градиентные кисти (класс LinearGradientBrush) задают «перелив» из одного цвета в другой. При создании такой кисти задается прямоугольник, который в памяти заполняется указанными цветами. Кроме двух цветов, указывается направление «перелива» (значение из перечисления LinearGradientMode). Например, в следующем примере создается кисть с «переливом» от желтого цвета к синему по главной диагонали.
// Создаем кисть с градиентом
Rectangle r(0, 0, 300, 300);
LinearGradientBrush^ br= gcnew LinearGradientBrush(r, Color::Yellow, Color::Blue,LinearGradientMode::ForwardDiagonal);
Рис 15. Использование градиентной кисти.
Текстурные кисти (класс TextureBrush) задают заливку с помощью изображения. Для создания такой кисти требуется указать изображение, например, загруженное из файла.
// Создаем кисть текстурную
TextureBrush^ br = gcnew TextureBrush(gcnew Bitmap(«C:\\Documents and
Settings\\Admin\\Мои документы\\Мои рисунки\\lilja.jpg»));
Рис 16. Использование текстурной кисти.
Как задать цвет?
При создании перьев и кистей, а также задании свойств фона, текста и др. может потребоваться указать цвет. За хранение цвета отвечает структура Color. Создать объект этой структуры можно следующими способами:
Выбрать из перечисления;
Color c = Color::Yellow;
Создать цвет по его имени:
Color c = Color::FromName(«Yellow»);
Создать цвет по трем составляющим модели RGB (количество красного, зеленого и синего цвета):
Color c = Color::FromArgb(200,0,100);
Далее можно будет обратиться к свойствам объекта для получения и имени цвета (Name), и каждого из компонентов цвета (R – красный цвет, G – зеленый цвет, B – синий цвет).
Как изменить цвет фона окна во время работы программы?
Большинство свойств окна являются доступными в любой функции, определенной для окна по имени свойства. Для цвета фона таким свойством является переменная BackColor. Например, пусть при двойном щелчке мыши в форме цвет формы изменяется. Также изменим заголовок окна (свойство Text), в котором укажем параметры нового цвета окна. Обработчик события двойного щелчка мыши в этом случае будет таким:
Кисти
Рассматривая выше элементы и их свойства, были упомянуты такие свойства, как Background и Foreground и назначение им определенного цвета Background=»Blue» . Но если посмотреть чуть глубже, то для установки цвета нам нужен объект класса System.Windows.Media.Brush. Значение «Blue» в данном случае является свойством класса Brushes, которое инкапсулирует объект SolidColorBrush . Например, в коде мы можем установить цвет так button1.Background=Brushes.Blue
А класс SolidColorBrush является кистью или наследником класса Brush, с помощью которого, таким образом, можно устанавливать свойства Background , Foreground и BorderBrush .
WPF поддерживает целый ряд кистей:
SolidColorBrush заливает содержимое сплошным цветом
LinearGradientBrush — градиентная кисть, представляет плавный переход от одного цвета к другому
RadialGradientBrush — градиентная кисть, плавно распределяющая заданные цвета от центральной точки к внешним границам.
ImageBrush в качестве заполнителя использует не цвет, а изображение
DrawingBrush с помощью свойства Drawing опеределяет рисунок, включающий, геометрические фигуры, другие элементы и т.д., служащее заполнителем.
VisualBrush в качестве заполнителя имеет какой-либо элемент управления или его часть
SolidColorBrush
Задает цвет для сплошной заливки:
Использование SolidColorBrush в коде:
LinearGradientBrush
Эта кисть создает плавный переход от одного цвета к другому. Для указания цвета и точек, от которых начинается переход, используется объект GradientStop . Его свойство Color указывает на цвет, а свойство Offset — на точку, с которой начинается переход.
С помощью свойств StartPoint и EndPoint можно определить направление градиента, сделать горизонтальный градиент или градиент под углом.
RadialGradientBrush
Эта кисть заполняет элемент радиальным градиентом. Объект RadialGradientBrush также имеет коллекцию объектов GradientStop , задающих цвет и смещение. Кроме того, он позволяет задавать центр градиента с помощью свойства GradientOrigin
Также RadialGradientBrush позволяет ограничить область градиента с помощью свойств RadiusX и RadiusY
ImageBrush
Эта кисть использует изображение в качестве фона. Источник устанавливается свойством ImageSource. Свойство Stretch задает способ заполнения элемента изображением — если оно равно Fill (по умолчанию), то изображение заполняет весь элемент, растягиваясь, если это нужно. Если Stretch=»Uniform», то изображение масштабируется пропорционально размеру элемента и по краям могут образоваться пустые места, не заполненные изображением.
Пример использования кистей:
Среди прочих свойств ImageBrush следует отметить свойство Viewbox. Оно применяется для выреза какой-то части изображения. Его первый параметр служит для установки x-координаты изображения, а второй параметр — y-координаты. Они находятся в пределах от нуля до единицы, и чтобы получить реальные координаты изображения, надо умножить первый параметр на ширину, а второй параметр — на высоту изображения. Третий и четвертый параметр указывают соответственно на ширину и высоту вырезаемого изображения. Так ниже в примере, начальная точка выреза изображения имеет координаты: 0.5*ширина_изображения, 0.45 * высота_изображения. Вырезается 30% от оставшейся ширины и 20% от оставшейся длины:
ImageBrush также позволяет нам многократно отобразить изображение на элементе и проделывать с ним некоторые преобразования. Для этого класс ImageBrush имеет свойство Viewport . Оно похоже на Viewbox, также задает четрые параметра, только они указывают на координаты прямоугольника Viewbox на элементе управления. Первый и второй параметр указывают на начальную координату этого прямоугольника, а третий и четвертый — на конечную точку. Реальные координаты получаются путем умножения параметров на длину и ширину элемента.
Кроме того, свойство TileMode позволяет задать режим заполнения элемента изображением. Оно имеет четыре варианта:
Tile — изображение многократно повторяется на элементе, пока не заполнит все пространство.
FlipX — изображение повторяется по оси X, и каждый второй столбец является зеркальным отображением предыдущего
FlipY — изображение повторяется по оси Y, и каждая вторая строка является зеркальным отображением предыдущей
FlipXY — каждое изображение зеркально отображается как по оси Х, так и по оси Y.
None — создается единичное изображение (по умолчанию)
DrawingBrush
DrawingBrush — более сложная кисть. Ее рисунок может содержать как отдельные изображения, так и сложные рисунки с применением различных геметрических форм.
Предыдущий пример можно было сделать с помощью DrawingBrush:
DrawingBrush использует те же свойства, что и ImageBrush — Viewport, Viewbox.
DrawingBrush имеет несколько вариантов рисунка:
ImageDrawing — заполнителем кисти является изображение.
GeometryDrawing — кисть формируется на основе рисунка, составленного каким-нибудь геометрическим примитивом (прямоугольником, линией, эллипсом)
VideoDrawing — кисть формируется на основе видеоресурса.
При необходимости сочетания нескольких вариантов, используется свойство DrawingGroup класса Drawing.
VisualBrush
Эта кисть при помощи свойства Visual создает привязку к определенному элементу, копируя весь его фон или его часть.
VisualBrush, как и кисти DrawingBrush и ImageBrush, обладает свойствами Viewport, Viewbox и TileMode, позволяющие проводить все те же преобразования, что были рассмотрены для этих кистей:
How do I add a hex code to brushes on C# WPF?
I use this code to change my background t1.Background = Brushes.White; and it’s working but how do I do it with hex codes? Because t1.Background = Brushes.#FF2463AE; doesn’t work. I’m using Visual Studio 2015. Thank You.
3 Answers 3
It would probably be best to create a single instance of the converter if you are doing many conversions.
You could try it like this:
Or if you are going to use the same color multiple times, save the brush:
13.6. Кисти Brush в .NET
В .NET есть несколько классов заливки, базовым для которых является Brush. Это класс, который позволяет задавать параметры заливки для таких фигур, как прямоугольник, эллипс, текст и т. д. Самый простой способ получить кисть нужного цвета — использовать системную кисть из перечисления SystemBrushes. Например, следующая строка создает заливку, которой в Windows окрашиваются рабочие области окон:
Класс Brush абстрактный, и вы не можете создать непосредственно его экземпляр, потому что у него есть абстрактные методы, которые не реализованы, но созданы для того, чтобы их реализовывали наследники. Самый простой и самый распространенный наследник: SolidBrush. Это не от русского слова «солидный», а от английского solid — сплошной, т. е. эта заливка заполняет область полностью одним цветом и одним узором:
В этом примере сначала создается новая кисть для закраски прямоугольника красным цветом. Во второй строке с помощью метода FillRectangle() я закрашиваю созданной кистью большой прямоугольник.
Обратите внимание, как я инициализирую новую кисть. Несмотря на то, что я создаю SolidBrush, я присваиваю результат классу предка Brush. Это чудеса ООП. Я мог бы присваивать результат переменной SolidBrush, и на дальнейшую работу это не повлияло бы:
Но у меня выработалась привычка присваивать именно Brush, не знаю почему.
Еще одна кисть, которую мы рассмотрим, — LinearGradientBrush:
Кисть LinearGradientBrush позволяет создавать линейный градиент. В качестве конструктора объект получает две точки (начало и конец градиента) и два цвета (начальный и конечный цвета градиента). Имея эти данные, система сама раскрасит заполняемую область плавным переходом от одного цвета к другому.