java – 如何动态计算颜色列表?

为了在GWT-Widget中表示具有不同颜色的对象列表,我们需要动态获得具有与对象不同颜色的颜色列表.由于List的大小可能不同,我们需要能够计算这样的颜色列表.

解决方法

我的解决方案的另一个版本有范围:
List<int> getUniqueColors(int amount) {
    final int lowerLimit = 0x10;
    final int upperLimit = 0xE0;    
    final int colorStep = (upperLimit-lowerLimit)/Math.pow(amount,1f/3);

    final List<int> colors = new ArrayList<int>(amount);

    for (int R = lowerLimit;R < upperLimit; R+=colorStep)
        for (int G = lowerLimit;G < upperLimit; G+=colorStep)
            for (int B = lowerLimit;B < upperLimit; B+=colorStep) {
                if (colors.size() >= amount) { //The calculated step is not very precise,so this safeguard is appropriate
                    return colors;
                } else {
                    int color = (R<<16)+(G<<8)+(B);
                    colors.add(color);
                }               
            }
    return colors;
}

这个更加先进,因为它产生尽可能彼此不同的颜色(像@aiiobe那样).

通常我们将范围分成红色绿色和蓝色的3个子范围,计算我们需要迭代它们的步数(通过应用pow(范围,1f / 3))并迭代它们.

例如,给定数字3,它将生成0x0000B1,0x00B100,0x00B1B1.对于数字10,它将是:0x000076,0x0000EC,0x007600,0x007676,0x0076EC,0x00EC00,0x00EC76,0x00ECEC,0x760000,0x760076

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...