Кисти и закрашенные фигуры

Закрытая фигура, например прямоугольник или эллипс, состоит из контура и внутренней части. Контур рисуется с помощью объекта Перо , а внутреннее пространство заполняется объектом Brush . Windows GDI+ предоставляет несколько классов кистей для заполнения интерьеров закрытых фигур: SolidBrush, HatchBrush, TextureBrush, LinearGradientBrush и PathGradientBrush. Все эти классы наследуются от класса Brush . На рисунке ниже показаны прямоугольник, залитый с помощью кисти сплошного цвета, и эллипс, залитый с помощью штриховой кисти.

иллюстрация, показывающая синий прямоугольник и пурпурный эллипс, заполненный синим узором штриховки

 

Сплошные кисти

Чтобы заполнить закрытую фигуру, вам потребуется графический объект и объект Brush . Объект Graphics предоставляет такие методы, как FillRectangle и FillEllipse, а объект Brush хранит атрибуты заливки, такие как цвет и узор. Адрес объекта Brush передается в качестве одного из аргументов методу fill. В следующем примере эллипс заполняется сплошным красным цветом.

SolidBrush mySolidBrush(Color(255, 255, 0, 0));
myGraphics.FillEllipse(&mySolidBrush, 0, 0, 60, 40);

Обратите внимание, что в предыдущем примере кисть имеет тип SolidBrush, который наследуется от Brush.

Кисти штриховки

При заливке фигуры штриховой кистью нужно указать цвет переднего плана, цвет фона и стиль штриховки. Обычно цвет переднего плана — это цвет штриховки.

HatchBrush myHatchBrush(
   HatchStyleVertical, 
   Color(255, 0, 0, 255),
   Color(255, 0, 255, 0));

GDI+ предоставляет более 50 стилей штриховки, указанных в HatchStyle. На следующем рисунке показаны три стиля: Horizontal, ForwardDiagonal и Cross.

Иллюстрация, показывающая три чикаго цвета эллипсы, каждый из которых имеет свой стиль штриховки

 

Текстурные кисти

С помощью текстурной кисти можно выполнить заливку фигуру шаблоном, хранящимся в растровом рисунке. Например, предположим, что следующий рисунок хранится в файле диска с именем MyTexture.bmp.

Снимок экрана: маленький квадрат, заполненный различными цветами

В следующем примере выполняется заполнение многоточия путем повторения рисунка, хранящегося в MyTexture.bmp.

Image myImage(L"MyTexture.bmp");
TextureBrush myTextureBrush(&myImage);
myGraphics.FillEllipse(&myTextureBrush, 0, 0, 100, 50);

На рисунке ниже показан заполненный эллипс.

Иллюстрация, показывающая эллипс, заполненный ранее определенным шаблоном

 

Градиентные кисти

Вы можете использовать градиентную кисть, чтобы заполнить фигуру цветом, который постепенно меняется от одной части фигуры к другой. Например, горизонтальная градиентная кисть изменит цвет при переходе от левой стороны фигуры к правой стороне. В следующем примере эллипс заполняется горизонтальной градиентной кистью, которая изменяется с синего на зеленый при переходе от левой стороны эллипса к правой стороне.

LinearGradientBrush myLinearGradientBrush(
   myRect,
   Color(255, 0, 0, 255),
   Color(255, 0, 255, 0),
   LinearGradientModeHorizontal);
myGraphics.FillEllipse(&myLinearGradientBrush, myRect); 

На рисунке ниже показан заполненный эллипс.

иллюстрация с многоточием с заливкой градиента: синий справа и зеленый слева

Кисть градиента пути можно настроить для изменения цвета при переходе от центра фигуры к границе.

иллюстрация эллипса, который темно-синий в центре, затенение до светло-синего по краю

Кисти градиента пути имеют гибкие настройки. Градиентная кисть используемая для заливки треугольника на следующем рисунке, постепенно меняется с красного цвета в центре на три разных цветов у вершин.

изображение треугольника, который красный в центре, затенение до разного цвета на каждой вершине