.NET Brush с жестким цветовым переходом (похож на градиент)
Мне нужна единственная кисть, которая сделает трудный переход от одного цвета к другому, как показано ниже. Я предоставляю Fill Brush другого элемента управления, поэтому мне нужен один объект Brush.
Что я хочу:
я пробовал LinearGradientBrush
несколько способов (см. ниже в качестве одного примера), но это не приводит к жесткой линии; переход все еще является градиентом, а линия размыта.
LinearGradientBrush brush = new LinearGradientBrush(pictureBox1.ClientRectangle, Color.Green, Color.Silver, 0f);
Blend blend = new Blend();
blend.Factors = new float[] { 0, 0, 1, 1 };
blend.Positions = new float[] { 0, .7f, .7f, 1 };
brush.Blend = blend;
Что я получаю:
Как определить одну кисть, которая будет делать это?
1 ответ
Для этого вам, вероятно, понадобится TexureBrush
,
TextureBrush
принимает изображение в качестве параметра, что означает, что вы можете либо загрузить существующее изображение с диска, либо создать изображение в памяти, к которому вы рисуете прямоугольники и т. д.
В следующем примере GetTextureBrush создаст реальную кисть. Здесь вы определяете цвета и форму. Я просто создал что-то на линии того, что вам нужно, настроить по мере необходимости.
Например (VB.net):
Private Sub DrawBrush()
Dim g As Graphics = Me.CreateGraphics
Dim bmp As Image = GetTexureBrush
Dim b As New TextureBrush(bmp)
g.FillRectangle(b, New Rectangle(0, 0, 200, 500))
b.Dispose()
bmp.Dispose()
g.Dispose()
End Sub
Private Function GetTexureBrush() As Image
Dim bmp As New Bitmap(100, 20)
Dim g As Graphics = Graphics.FromImage(bmp)
g.FillRectangle(Brushes.DarkGreen, New Rectangle(0, 0, 75, 20))
g.FillRectangle(Brushes.Gray, New Rectangle(75, 0, 25, 20))
g.Dispose()
Return bmp
End Function
C#
private void DrawBrush()
{
Graphics g = this.CreateGraphics;
Image bmp = GetTexureBrush();
TextureBrush b = new TextureBrush(bmp);
g.FillRectangle(b, new Rectangle(0, 0, 200, 500));
b.Dispose();
bmp.Dispose();
g.Dispose();
}
private Image GetTexureBrush()
{
Bitmap bmp = new Bitmap(100, 20);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(Brushes.DarkGreen, new Rectangle(0, 0, 75, 20));
g.FillRectangle(Brushes.Gray, new Rectangle(75, 0, 25, 20));
g.Dispose();
return bmp;
}