我正在使用以下代码,我用线性渐变画笔绘制一个矩形。但是,我无法理解刷构造函数的前两个参数实际上是如何工作的。我搜查了所有我发现这些应该是画笔的起点和终点。但是刷子本身怎么能有起点和终点呢?
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);
答案 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);
}
注意颜色如何从左上角的红色过渡到沿黄线的右下角的蓝色。如果我们反转端点怎么办?
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));
希望能帮助您了解线性渐变画笔的工作原理。不要害怕尝试。你可以自己轻松尝试这些东西。这是最好的学习方式。