我需要一个单个画笔,它将从一种颜色到下一种颜色进行硬转换,如下所示。我正在提供另一个控件的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;
我得到了什么:
如何定义单个画笔来执行此操作?
答案 0 :(得分:2)
为此,您可能需要使用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;
}