寻找帮助在c#与RGB颜色交叉褪色

本文关键字:颜色 褪色 RGB 帮助 寻找 | 更新日期: 2023-09-27 17:50:18

好了,我用c#制作了一个应用程序,它使用外部LED控制器从我的屏幕上轮询信息以获得灯光SFX。我的问题是,代码是什么或者说我怎么做一个颜色交叉渐变类型的东西从红色到绿色再到蓝色然后输出RGB值为

red = CODE;
green = CODE; 
blue = CODE;

我很久以前在c++中使用"Interpolation(FadeSteps, Delay, Array)"完成了这个操作,我只是不知道c#中如何使用

想象画一个2D的盒子,让它从一种颜色渐变到另一种颜色,这就是这个想法。

我只想设置渐变的速度
关于控制内容的概念

寻找帮助在c#与RGB颜色交叉褪色

好吧,如果我没理解错的话,你是想从红色变成绿色再变成蓝色?

从一个结构体和一个枚举开始,用来保存颜色数据和状态。

public enum PrimaryColor
{
    Red,
    Green,
    Blue
}
public struct Color
{
    public byte r;
    public byte g;
    public byte b;
    public Color(byte r, byte g, byte b)
    {
        this.r = r;
        this.g = g;
        this.b = b;
    }
}

然后创建一些变量来保存状态数据,包括一个将遍历的数组。

Color ActualColor = new Color(255, 0, 0);
int State = 0;
PrimaryColor[] Order = { PrimaryColor.Red, PrimaryColor.Green, PrimaryColor.Blue };

然后,在你的更新函数(比如定时器,或者while循环,等等)中,我们添加一个小的switch语句来更新颜色,检查字节底流和改变状态。

switch (Order[State])
{
    case PrimaryColor.Red:
        ActualColor.r++;
        if(ActualColor.g > 0) ActualColor.g--;
        if (ActualColor.b > 0) ActualColor.b--;
        if (ActualColor.r == 255 && ActualColor.g == 0 && ActualColor.b == 0) State++;
        break;
    case PrimaryColor.Green:
        ActualColor.g++;
        if (ActualColor.r > 0) ActualColor.r--;
        if (ActualColor.b > 0) ActualColor.b--;
        if (ActualColor.r == 0 && ActualColor.g == 255 && ActualColor.b == 0) State++;
        break;
    case PrimaryColor.Blue:
        ActualColor.b++;
        if (ActualColor.g > 0) ActualColor.g--;
        if (ActualColor.r > 0) ActualColor.r--;
        if (ActualColor.r == 0 && ActualColor.g == 0 && ActualColor.b == 255) State++;
        break;
    default:
        break;
}
if (State == Order.Length) State = 0;
//Send color data to your controller