C# C平滑彩虹褪色问题
因此,我试图通过向RGB添加不同的值并将标签设置为这些值,使这个具有真正平滑彩虹的文本标签褪色,但我找不到停止开始整个过程的起始值的方法! 我知道这段代码很混乱,还有一些不必要的东西,比如随机数之类的东西。但它抛出错误System.ArgumentException:“256”的值对于“红色”无效。”红色“应大于或等于0且小于或等于255。”C# C平滑彩虹褪色问题,c#,C#,因此,我试图通过向RGB添加不同的值并将标签设置为这些值,使这个具有真正平滑彩虹的文本标签褪色,但我找不到停止开始整个过程的起始值的方法! 我知道这段代码很混乱,还有一些不必要的东西,比如随机数之类的东西。但它抛出错误System.ArgumentException:“256”的值对于“红色”无效。”红色“应大于或等于0且小于或等于255。” int R = 0; int G = 0; int B = 0; private void timer2_Tick(ob
int R = 0;
int G = 0;
int B = 0;
private void timer2_Tick(object sender, EventArgs e)
{
Random r = new Random();
int A = r.Next(255, 255);
R += 1;
if (R > 250)
{
G += 1;
R -= 1;
}
if (G > 250)
{
B += 1;
G -= 1;
}
if (B > 250)
{
R += 1;
B -= 1;
}
lblMarquee.ForeColor = Color.FromArgb(A, R, G, B);
}
你在这里的代码有很多问题,所以我想我只关注这一点。至于你的彩虹配色方案,我不确定你是否走对了方向。然而,假设你是,这应该会帮助你
// never recreate the random class in your method
// always just create one
private static readonly Random _rand = new Random();
// your variables, make them byte as that's what we are dealing with
private static byte _r = 0;
private static byte _g = 0;
private static byte _b = 0;
private static byte _a = 0;
private static SomeMethod()
{
// make your life easier with some helper methods
void Inc(ref byte val)
=> val = (byte)(val>=255 ? 0: val++);
void Dec(ref byte val)
=> val = (byte)(val<=0 ? 255: val--);
// not sure why you want this
_a = (byte)_rand.Next(255);
_r += 1;
// i have no idea what your logic is here, but it looks neater
// and wont overflow, which is your problem
// however i seriously doubt this will give you a rainbow
if (_r > 250)
{
Inc(ref _g);
Dec(ref _r);
}
if (_g > 250)
{
Inc(ref _b);
Dec(ref _g);
}
if (_b > 250)
{
Inc(ref _r);
Dec(ref _b);
}
lblMarquee.ForeColor = Color.FromArgb(_a, _r, _g, _b);
}
使用模运算来限制值我知道这是一个很大的问题,但我对所有这些都很陌生,如果你能给我更多的澄清,甚至给我一个解决这个问题的方法,我将不胜感激,我对“模运算”一点也不了解!一旦B达到251,R开始再次计数。。。。。永远。此外,通常,在RGB颜色空间中移动并不像在HSL颜色空间中移动那样令人愉快。因此,找出一种更好的方法: