我正在尝试在我的 WPF 应用程序中绘制类似于 soundcloud.com 上使用的波形我正在通过绘制多条垂直线来做到这一点
我想要的是所有线条都具有相同的颜色过渡(因此水平方向上所有像素都具有相同的颜色)因为并非所有线条都具有相同的长度,每条线条的末端都有不同的颜色。
LinearGradientBrush 有很多构造函数,最适合我需求的似乎是LinearGradientBrush(GradientStopCollection, Point, Point)。
Msdn 关于 LinearGradientContstructor 的文章
有了这些点,我似乎可以将 GradientStops 设置在画线之外
我的问题是我不知道如何使用积分。
var r = new GradientStopCollection();
r.Add(new GradientStop(Colors.Black, 0));
r.Add(new GradientStop(Colors.Red, 0.5));
r.Add(new GradientStop(Colors.Black, 1));
//this would be my main gradient background for all my lines (100%)
for (int i = 0; i < 25; i++)
{
var line = new Line { X1 = i, X2 = i, Y1 = 0, Y2 = 200, Stroke = new LinearGradientBrush(r), StrokeThickness = 1 };
WaveformCanvas.Children.Add(line);
}
//this would be an actual value of the waveform, points 0,0 and 1,1 seem to indicate that the gradientstops are exactly on the y1/y2
for (int i = 25; i < 50; i++)
{
var line = new Line { X1 = i, X2 = i, Y1 = 50, Y2 = 150, Stroke = new LinearGradientBrush(r, new Point(0, 0), new Point(1, 1)), StrokeThickness = 1 };
WaveformCanvas.Children.Add(line);
}
//these point values seem to be about correct for the current line length
//I came to these values by trial and error
for (int i = 50; i < 75; i++)
{
var line = new Line { X1 = i, X2 = i, Y1 = 50, Y2 = 150, Stroke = new LinearGradientBrush(r, new Point(-0.5, -0.5), new Point(1.5, 1.5)), StrokeThickness = 1 };
WaveformCanvas.Children.Add(line);
}
我对为什么这些点是 2d 坐标感到困惑,因为点 -0.5,-0.5 的渐变似乎与绘制的线没有不同的角度
所以我需要了解如何相对于我的“主要 100% 渐变”放置点
或者也许更简单的方法是用纯色绘制线条,然后使用某种颜色选择将黑色像素替换为矩形渐变作为背景。