在C#.net中为线条上的渐变颜色设置动画

在C#.net中为线条上的渐变颜色设置动画,c#,.net,winforms,animation,gradient,C#,.net,Winforms,Animation,Gradient,假设我有一条线,它是三种颜色的渐变色:暗红色、红色和浅红色。我想改变这些颜色在那条线上的位置。我的目的是显示出某些东西正在沿着这条线移动。 我不知道如何创建动画来改变线中每个颜色的位置,这是彩色渐变 我发现: 但这并不太清楚。这里有一个例子: 它使用一个LineraGradientBrush,将定义矩形的起点移动到左上角,并将一个旋转的矩形绘制到一个图片框上: Point p1 = Point.Empty; private void timer1_Tick(object sender, E

假设我有一条线,它是三种颜色的渐变色:暗红色、红色和浅红色。我想改变这些颜色在那条线上的位置。我的目的是显示出某些东西正在沿着这条线移动。 我不知道如何创建动画来改变线中每个颜色的位置,这是彩色渐变

我发现:

但这并不太清楚。

这里有一个例子:

它使用一个
LineraGradientBrush
,将定义矩形的起点移动到左上角,并将一个旋转的矩形绘制到一个
图片框上

Point p1 = Point.Empty;

private void timer1_Tick(object sender, EventArgs e)
{
    int deltaX = -3;
    int deltaY = -3;
    p1 = new Point(p1.X + deltaX , p1.Y + deltaY); // roll..
    if (p1.X < deltaX * 1000) p1 = Point.Empty;    // ..around
    pictureBox1.Invalidate();

}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    float angle = 33f;
    if (!timer1.Enabled) return;
    Rectangle rectG = new Rectangle(p1.X, p1.Y, 122, 22);
    Rectangle rectR = new Rectangle(22, 22, 222, 22);
    LinearGradientBrush lBrush = new LinearGradientBrush(rectG, 
                                     Color.Red, Color.Red, angle, false);

    ColorBlend cblend = new ColorBlend(5);
    cblend.Colors = new Color[5]  
         { Color.Red, Color.Pink, Color.MistyRose, Color.LightCoral, Color.White };
    cblend.Positions = new float[5] { 0f, 0.2f, 0.5f, 0.8f, 1f };
    lBrush.InterpolationColors = cblend;
    lBrush.WrapMode = WrapMode.TileFlipXY;

    e.Graphics.RotateTransform(angle);
    e.Graphics.TranslateTransform(22,11);
    e.Graphics.FillRectangle(lBrush, rectR);
}
点p1=点.空;
私有无效计时器1_刻度(对象发送方,事件参数e)
{
int deltaX=-3;
int deltaY=-3;
p1=新点(p1.X+deltaX,p1.Y+deltaY);//滚动。。
如果(p1.X
请注意,这是Winforms,您无法获得真正平滑的动画,但如果您在其上绘制的控件/窗体是双缓冲的,至少它不会闪烁。

以下是一个示例:

它使用一个
LineraGradientBrush
,将定义矩形的起点移动到左上角,并将一个旋转的矩形绘制到一个
图片框上

Point p1 = Point.Empty;

private void timer1_Tick(object sender, EventArgs e)
{
    int deltaX = -3;
    int deltaY = -3;
    p1 = new Point(p1.X + deltaX , p1.Y + deltaY); // roll..
    if (p1.X < deltaX * 1000) p1 = Point.Empty;    // ..around
    pictureBox1.Invalidate();

}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    float angle = 33f;
    if (!timer1.Enabled) return;
    Rectangle rectG = new Rectangle(p1.X, p1.Y, 122, 22);
    Rectangle rectR = new Rectangle(22, 22, 222, 22);
    LinearGradientBrush lBrush = new LinearGradientBrush(rectG, 
                                     Color.Red, Color.Red, angle, false);

    ColorBlend cblend = new ColorBlend(5);
    cblend.Colors = new Color[5]  
         { Color.Red, Color.Pink, Color.MistyRose, Color.LightCoral, Color.White };
    cblend.Positions = new float[5] { 0f, 0.2f, 0.5f, 0.8f, 1f };
    lBrush.InterpolationColors = cblend;
    lBrush.WrapMode = WrapMode.TileFlipXY;

    e.Graphics.RotateTransform(angle);
    e.Graphics.TranslateTransform(22,11);
    e.Graphics.FillRectangle(lBrush, rectR);
}
点p1=点.空;
私有无效计时器1_刻度(对象发送方,事件参数e)
{
int deltaX=-3;
int deltaY=-3;
p1=新点(p1.X+deltaX,p1.Y+deltaY);//滚动。。
如果(p1.X

请注意,这是Winforms,您无法获得真正平滑的动画,但如果您绘制的控件/窗体是双缓冲的,至少它不会闪烁。

在Winforms中,您可以使用LinearGradientBrush并在勾号事件中将起点向外移动。.我添加了它@TaWIn winforms您可以使用LinearGradientBrush并在勾号事件中将起点向外移动..我添加了它@陶