C# 线性渐变画笔。我怎样才能改变两种颜色混合的点?
C# LinearGradientBrush. How can I change the point where the two colors blend?
我有这段代码可以让我在我的 windows 表单中添加一些混合:
public partial class Form1 : Form
{
protected override void OnPaintBackground(PaintEventArgs e)
{
using (LinearGradientBrush brush = new LinearGradientBrush(this.ClientRectangle,
Color.White,
Color.Black,
LinearGradientMode.Vertical))
{
e.Graphics.FillRectangle(brush, this.ClientRectangle);
}
}
}
这是结果:
默认情况下,两种颜色混合的"peak"就在框的中间。我想以这种方式调整代码,使混合的 "peak" 发生在顶部的 3/4 左右。是否可以改变两种颜色开始混合的点?
提前致谢。
您可以设置InterpolationColors
property of the brush to a suitable ColorBlend
例如:
using (var brush = new LinearGradientBrush(this.ClientRectangle,
Color.Transparent, Color.Transparent, LinearGradientMode.Vertical))
{
var blend = new ColorBlend();
blend.Positions = new[] { 0, 3 / 4f, 1 };
blend.Colors = new[] { Color.White, Color.Black, Color.Black };
brush.InterpolationColors = blend;
e.Graphics.FillRectangle(brush, this.ClientRectangle);
}
或者例如另一种混合物:
blend.Positions = new[] { 0, 1 / 2f, 1 };
blend.Colors = new[] { Color.White, Color.Gray, Color.Black };
我有这段代码可以让我在我的 windows 表单中添加一些混合:
public partial class Form1 : Form
{
protected override void OnPaintBackground(PaintEventArgs e)
{
using (LinearGradientBrush brush = new LinearGradientBrush(this.ClientRectangle,
Color.White,
Color.Black,
LinearGradientMode.Vertical))
{
e.Graphics.FillRectangle(brush, this.ClientRectangle);
}
}
}
这是结果:
默认情况下,两种颜色混合的"peak"就在框的中间。我想以这种方式调整代码,使混合的 "peak" 发生在顶部的 3/4 左右。是否可以改变两种颜色开始混合的点?
提前致谢。
您可以设置InterpolationColors
property of the brush to a suitable ColorBlend
例如:
using (var brush = new LinearGradientBrush(this.ClientRectangle,
Color.Transparent, Color.Transparent, LinearGradientMode.Vertical))
{
var blend = new ColorBlend();
blend.Positions = new[] { 0, 3 / 4f, 1 };
blend.Colors = new[] { Color.White, Color.Black, Color.Black };
brush.InterpolationColors = blend;
e.Graphics.FillRectangle(brush, this.ClientRectangle);
}
或者例如另一种混合物:
blend.Positions = new[] { 0, 1 / 2f, 1 };
blend.Colors = new[] { Color.White, Color.Gray, Color.Black };