LinearGradientBrush构造函数参数
我正在使用以下代码,其中使用线性渐变画笔绘制矩形。但是,我无法理解画笔构造函数的前两个参数是如何工作的。我搜索了所有我发现的是,这些应该是刷子的开始和结束点。但是,画笔本身如何具有起点和终点呢?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);
一个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));
注意如何从红色在左上角的色彩过渡沿着黄线在右下方变成蓝色。如果我们颠倒了终点呢?
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));
希望帮助您了解渐变画笔如何线性工作。不要害怕尝试。你可以自己轻松地尝试这些东西。这是学习的最佳方式。
这真的很有帮助...所以如果我设置点(0,0)和(0,100 )与(0,100)和(0,200)...或(0,0)相同,(50,50)与(50,50)和(100,100)相同...导致它们并行。 – 2014-11-06 14:06:33
有点。平行线将保持渐变的方向相同,但请记住渐变从起点开始并在终点处结束。所以你可以有两条不同长度的平行线,渐变看起来不一样。例如(10,0)和(10,50)对比(20,0)和(20,25)。您也可以使用平行且长度相同的线条,但这些线条是偏移的,所以渐变看起来相同,但会偏移到起始位置。例如,(10,10)和(10,50)与(20,20)和(20,60)。 (续) – 2014-11-06 15:10:30
但是你说得对,有多组起点和终点导致相同的精确梯度结果。 – 2014-11-06 15:11:30
您是否阅读过'LinearGradientBrush'的文档?在构造函数的文档中有什么特别的地方是你理解有困难? – 2014-11-06 00:42:56
你刚试过吗?屏幕上的差异应该很明显。 – BradleyDotNET 2014-11-06 00:50:37
@DJKRAZE真的吗?那又是如何重复的? – BradleyDotNET 2014-11-06 00:51:40