C# LinearGradientBrush构造函数参数

C# LinearGradientBrush构造函数参数,c#,winforms,C#,Winforms,我使用下面的代码,用线性渐变笔刷绘制一个矩形。但是,我无法理解笔刷构造函数的前两个参数实际上是如何工作的。我搜索了一下,发现这些应该是画笔的起点和终点。但是画笔本身怎么能有起点和终点呢 using System.Drawing.Drawing2D; LinearGradientBrush lgb = new LinearGradientBrush( new Point(0, 0), new Point(40, 40), Color.Red, Color.DarkBlue); Graph

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

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);
A使用线性渐变绘制区域,换句话说,沿着由起点和终点定义的线混合颜色。笔刷的第一种颜色在起点处使用,颜色沿直线平滑过渡,从而在终点处成为第二种颜色。因此,通过改变端点,您可以调整渐变的方向和发生颜色过渡的距离,甚至在距离小于您尝试填充的区域时使其重复

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

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);
}
现在,我们可以方便地从某个地方调用此代码,例如按钮单击处理程序,并传递一些信息。下面是如果我们通过一个起点(0,0)和一个终点(79,79),会发生什么:

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

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

正如预期的那样,过渡现在朝着相反的方向进行,红色在右下角,蓝色在左上角。类似地,我们可以使用水平线的端点使过渡从左向右:

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

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

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

也可以将渐变端点放置在填充区域之外。这将导致更微妙的颜色过渡:

DrawGradient(new Point(0, 90), new Point(140, 40));


希望这能帮助你理解线性渐变笔刷是如何工作的。不要害怕实验。你自己可以很容易地尝试这些东西。这是最好的学习方法。

您是否阅读了
LinearGradientBrush
的文档?您对构造器文档中的哪些内容理解有困难?您刚刚试过吗?差别在屏幕上应该很明显。@DJKRAZE真的吗?那怎么会是重复的呢?
BradleyDotNet
重复和可能的重复之间有区别。。我们之前已经讨论过这个问题,这里有一些关于你正在尝试的其他帖子,看起来你不正确地使用了构造函数,这真的很有帮助。。。因此,如果我设置点(0,0)和(0100),它与(0100)和(0200)相同。。。或者(0,0)和(50,50)与(50,50)和(100100)相同。。。因为它们是平行的,有点像。平行线将保持渐变的方向相同,但请记住渐变从起点开始,在终点结束。所以你可以有两条不同长度的平行线,梯度看起来会不同。例如,(10,0)和(10,50)对(20,0)和(20,25)。也可以有平行且长度相同但偏移的线,因此渐变看起来相同,但从何处开始移动。例如,(10,10)和(10,50)对(20,20)和(20,60)。(续)但您是对的,有多组起点和终点会产生相同的精确渐变结果。
DrawGradient(new Point(0, 90), new Point(140, 40));