如何在Java中以彩虹顺序循环遍历所有RGB组合?

时间:2015-08-03 10:08:08

标签: java loops colors rgb

我试图以彩虹顺序遍历所有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);

1 个答案:

答案 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]等。