我试图以彩虹顺序遍历所有rgb颜色。目前我有这个:
int state = 1;
int a = 255;
int r = 255;
int g = 0;
int b = 0;
if(g < 255 && state == 1){
g++;
r--;
if(g == 255)
state = 2;
}
if(b < 255 && state == 2){
b++;
g--;
if(b == 255)
state = 3;
}
if(state == 3){
r++;
b--;
if(b == 0)
state = 1;
}
int hex = (a << 24) + (r << 16) + (g << 8) + (b);
它有效,但似乎并没有得到所有的颜色。我知道这可能是一种糟糕的做法,是的,我知道我可以在彼此内部做3个循环,但有没有人知道这样做的更好的方法可以获得所有的颜色?
另外,我没有使用3个循环的原因是因为它需要在每个新的RGB组合之后更新,而不是在循环结束之后更新,因为每次都给我相同的结果。
编辑: 感谢pbabcdefp,我得到了它的工作,解决方案如下。
int state = 0;
int a = 255;
int r = 255;
int g = 0;
int b = 0;
if(state == 0){
g++;
if(g == 255)
state = 1;
}
if(state == 1){
r--;
if(r == 0)
state = 2;
}
if(state == 2){
b++;
if(b == 255)
state = 3;
}
if(state == 3){
g--;
if(g == 0)
state = 4;
}
if(state == 4){
r++;
if(r == 255)
state = 5;
}
if(state == 5){
b--;
if(b == 0)
state = 0;
}
int hex = (a << 24) + (r << 16) + (g << 8) + (b);
答案 0 :(得分:0)
您需要找到所有组合。代码的问题在于,在一个循环中修改两个值。在这种情况下,您跳过一种颜色。例如,你有G = 100和R = 100:
克++; R--; 在这一行之后G将是101而R将是99.下一次将是G102,R98你现在有三种组合:
[g100,r100],g [101,r99],g [102,r98]。
但你错过了很多其他的组合,如[g100,r99]和g [101,r100],或g [101,r98]等。