LinearGradientBrush构造函数参数

时间:2014-11-06 00:40:38

标签: c# winforms

我正在使用以下代码,我用线性渐变画笔绘制一个矩形。但是,我无法理解刷构造函数的前两个参数实际上是如何工作的。我搜查了所有我发现这些应该是画笔的起点和终点。但是刷子本身怎么能有起点和终点呢?

using System.Drawing.Drawing2D;

LinearGradientBrush lgb = new LinearGradientBrush(
    new Point(0, 0), new Point(40, 40), Color.Red, Color.DarkBlue);
Graphics g = panel1.CreateGraphics();
g.FillRectangle(lgb, 20, 20, 80, 80);

如果有人能告诉我如果改变构造函数变量会有什么不同,我会特别喜欢它:

LinearGradientBrush lgb = new LinearGradientBrush(
    new Point(20, 20), new Point(60, 60), Color.Red, Color.DarkBlue);

1 个答案:

答案 0 :(得分:0)

A LinearGradientBrush线性渐变绘制一个区域,换句话说,沿着由起点和终点定义的线条混合颜色。在起始点使用画笔的第一种颜色,并且颜色沿着线平滑地过渡,使得它成为结束点处的第二种颜色。因此,通过改变端点,您可以调整渐变的方向和颜色过渡发生的距离,如果距离比您要填充的区域短,则甚至会使其重复。

您已经在问题中写了代码,为什么不尝试一些实验呢?我假设您的表单上有一个名为Panel的{​​{1}},其大小至少为150 x 150单位。为方便起见,我们将您的代码放入一个私有方法中,该方法接受渐变的起点和终点。为了便于说明,我们还会添加一些代码来绘制一条黄色线,从与渐变相同的点开始和结束。

panel1

现在我们可以从方便的地方轻松调用此代码,例如按钮单击处理程序,并将其传递给某些点。如果我们传递一个起点(0,0)和一个结束点(79,79)会发生什么:

private void DrawGradient(Point startPoint, Point endPoint)
{
    LinearGradientBrush lgb = 
        new LinearGradientBrush(startPoint, endPoint, Color.Red, Color.DarkBlue);
    Graphics g = panel1.CreateGraphics();
    g.FillRectangle(lgb, 0, 0, 80, 80);
    g.DrawLine(new Pen(Color.Yellow, 1.5f), startPoint, endPoint);
}

diagonal gradient top left to bottom right

注意颜色如何从左上角的红色过渡到沿黄线的右下角的蓝色。如果我们反转端点怎么办?

DrawGradient(new Point(0, 0), new Point(79, 79));

diagonal gradient bottom right to top left

正如预期的那样,过渡现在是相反的方向,右下角是红色,左上角是蓝色。同样,我们可以通过使用水平线的端点来从左到右进行转换:

DrawGradient(new Point(79, 79), new Point(0, 0));

left-to-right gradient

渐变线的端点不需要位于我们填充区域的边缘。例如,如果它们位于填充区域内,则渐变将以等于线段长度的周期重复。我们最终得到了一种时髦的条纹效果:

DrawGradient(new Point(0, 40), new Point(79, 40));

repeating gradient

您也可以将渐变端点放在填充区域之外。这会导致更微妙的颜色转换:

DrawGradient(new Point(65, 25), new Point(45, 35));

gradient with endpoints outside the fill area

希望能帮助您了解线性渐变画笔的工作原理。不要害怕尝试。你可以自己轻松尝试这些东西。这是最好的学习方式。