Brush c как задать цвет
Перейти к содержимому

Brush c как задать цвет

  • автор:

Что такое кисть (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);

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8

Далее можно будет обратиться к свойствам объекта для получения и имени цвета (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 позволяет создавать линейный градиент. В качестве конструктора объект получает две точки (начало и конец градиента) и два цвета (начальный и конечный цвета градиента). Имея эти данные, система сама раскрасит заполняемую область плавным переходом от одного цвета к другому.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *