Поделиться через


Кисти и заполненные фигуры

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

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

 

Твердые кисти

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

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

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

Люк кисти

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

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

GDI+ предоставляет более 50 стилей хэтчов, указанных в HatchStyle. Три стиля, показанные на следующем рисунке, — "Горизонтальный", "Переадресация" и "Кросс".

иллюстрация с тремя цветными многоточиями, каждая из которых отличается стилем люка

 

Кисти текстуры

С помощью кисти текстуры можно заполнить фигуру шаблоном, хранящимся в растровом рисунке. Например, предположим, что следующий рисунок хранится в файле диска с именем 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); 

На следующем рисунке показана заполненная многоточие.

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

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

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

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

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