作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我试图以彩虹顺序遍历所有 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);
最佳答案
您需要找到所有组合。您的代码的问题是在一个循环中您修改了两个值。在这种情况下,您会跳过一种颜色。例如,您有 G=100 和 R=100:
g++; r--;在这行之后 G 将是 101,R 将是 99。下一次是 G102,R98 您现在有三种组合:
[g100,r100], g[101,r99], g[102,r98]。
但是您在这里错过了很多其他组合,例如 [g100,r99] 和 g[101,r100],或 g[101,r98] 等。
关于java - 如何在 Java 中以彩虹顺序遍历所有 RGB 组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31784658/
我是一名优秀的程序员,十分优秀!