好的,我在C#中创建了一个应用程序,使用外部LED控制器从我的屏幕上查看ambilight SFX的信息。我的问题是,代码是什么,或者我如何制作一个颜色交叉淡入淡出类型的东西,我从红色到绿色变为蓝色,然后将RGB值作为
red = CODE;
green = CODE;
blue = CODE;
我很久以前在C ++中使用“Interpolation(FadeSteps,Delay,Array)”完成了这个,我只是不知道如何在C#中
想想绘制一个2D盒子并让它从一种颜色淡化到另一种颜色就是这个想法。
我只想设置淡入淡出的速度
Idea as to what it's controlling
答案 0 :(得分:1)
好的,如果我理解你的话,你想要从红色渐变,从绿色渐变到蓝色?
从结构和枚举开始,以保存我们的颜色数据和状态。
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