2014-11-06 213 views
-1

我正在使用以下代码,其中使用线性渐变画笔绘制矩形。但是,我无法理解画笔构造函数的前两个参数是如何工作的。我搜索了所有我发现的是,这些应该是刷子的开始和结束点。但是,画笔本身如何具有起点和终点呢?LinearGradientBrush构造函数参数

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); 
+2

您是否阅读过'LinearGradientBrush'的文档?在构造函数的文档中有什么特别的地方是你理解有困难? – 2014-11-06 00:42:56

+1

你刚试过吗?屏幕上的差异应该很明显。 – BradleyDotNET 2014-11-06 00:50:37

+0

@DJKRAZE真的吗?那又是如何重复的? – BradleyDotNET 2014-11-06 00:51:40

回答

0

一个LinearGradientBrush描绘的区域与线性渐变,换言之,沿着由起点和终点限定的线的颜色混合。画笔的第一种颜色在起点处使用,并且颜色沿着线条平滑过渡,从而变成终点处的第二种颜色。因此,通过改变端点,您可以调整渐变的方向和发生颜色转变的距离,甚至在距离比您要填充的区域更短时重复该距离。

您已经在您的问题中编写了代码,为什么不尝试几个实验?我假设你的表格上有一个Panel,名字为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(0, 0), new Point(79, 79)); 

diagonal gradient top left to bottom right

注意如何从红色在左上角的色彩过渡沿着黄线在右下方变成蓝色。如果我们颠倒了终点呢?

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

diagonal gradient bottom right to top left

如所预期的,过渡现在去在相反的方向,与红色在右下和蓝色中的左上角。同样,我们可以过渡使用端点水平线去左到右:

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

left-to-right gradient

渐变线的终点并不需要是在禁区边缘我们正在填补。例如,如果它们位于填充区域内,则渐变将以与线段长度相等的周期重复。我们结束了一个时髦的条纹效果:

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

repeating gradient

您也可以将填充区域外的梯度端点。这导致一个更加微妙的色彩过渡:

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

gradient with endpoints outside the fill area

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

+0

这真的很有帮助...所以如果我设置点(0,0)和(0,100 )与(0,100)和(0,200)...或(0,0)相同,(50,50)与(50,50)和(100,100)相同...导致它们并行。 – 2014-11-06 14:06:33

+0

有点。平行线将保持渐变的方向相同,但请记住渐变从起点开始并在终点处结束。所以你可以有两条不同长度的平行线,渐变看起来不一样。例如(10,0)和(10,50)对比(20,0)和(20,25)。您也可以使用平行且长度相同的线条,但这些线条是偏移的,所以渐变看起来相同,但会偏移到起始位置。例如,(10,10)和(10,50)与(20,20)和(20,60)。 (续) – 2014-11-06 15:10:30

+0

但是你说得对,有多组起点和终点导致相同的精确梯度结果。 – 2014-11-06 15:11:30