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


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

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

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

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

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

SolidBrush mySolidBrush = new SolidBrush(Color.Red);
myGraphics.FillEllipse(mySolidBrush, 0, 0, 60, 40);
Dim mySolidBrush As New SolidBrush(Color.Red)
myGraphics.FillEllipse(mySolidBrush, 0, 0, 60, 40)

Заметка

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

Кисти для штриховки

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

HatchBrush myHatchBrush =
   new HatchBrush(HatchStyle.Vertical, Color.Blue, Color.Green);
Dim myHatchBrush As _
   New HatchBrush(HatchStyle.Vertical, Color.Blue, Color.Green)

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

снимок экрана трех эллипсов, заполненных горизонтальной штриховкой, штриховкой с наклоном вперед и перекрестной штриховкой.

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

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

снимок экрана bmp-файла

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

Image myImage = Image.FromFile("MyTexture.bmp");
TextureBrush myTextureBrush = new TextureBrush(myImage);
myGraphics.FillEllipse(myTextureBrush, 0, 0, 100, 50);
Dim myImage As Image = Image.FromFile("MyTexture.bmp")
Dim myTextureBrush As New TextureBrush(myImage)
myGraphics.FillEllipse(myTextureBrush, 0, 0, 100, 50)

На следующем рисунке показан заполненный эллипс.

снимок экрана эллипса, заполненного текстурной кистью.

Градиентные заливки

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

LinearGradientBrush myLinearGradientBrush = new LinearGradientBrush(
   myRectangle,
   Color.Blue,
   Color.Green,
   LinearGradientMode.Horizontal);
myGraphics.FillEllipse(myLinearGradientBrush, myRectangle);
Dim myLinearGradientBrush As New LinearGradientBrush( _
   myRectangle, _
   Color.Blue, _
   Color.Green, _
   LinearGradientMode.Horizontal)
myGraphics.FillEllipse(myLinearGradientBrush, myRectangle)

На следующем рисунке показан заполненный эллипс.

снимок экрана с эллипсом, заполненным горизонтальной градиентной кистью.

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

снимок экрана эллипса, заполненного градиентной кистью путей.

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

Снимок экрана треугольника, заполненного кистью с градиентной заливкой.

См. также