微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/java/127359.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐