• java 随机颜色


    用HSV模型来实现颜色的随机,然后转为RGB模型

    • 色相(H)是色彩的基本属性,就是平常所说的颜色名称,如红色、黄色等。
    • 饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。
    • 明度(V),亮度(L),取0-100%。

    后两项如果写成固定值的话,那么色调会比较统一,以下为代码

    import java.util.Random;
    
    public class RandomColorUtil{
        private static Random random = new Random();
        private float k = random.nextFloat() * 360;
    
        public static void main(String[] args) {
            RandomColorUtild = new RandomColorUtil();
            for (int i = 0; i < 10; i++) {
                Color c = d.randomColor();
                System.out.println(((int) c.r) + " " + ((int) c.g) + " " + ((int) c.b));
            }
        }
    
        public Color randomColor() {
            return HSVtoRGB(randomH(), 0.8F, 0.8F);
        }
    
        private float randomH() {
            k += (1 - 0.618f) * 360;
            if (k > 360)
                k -= 360;
            return k;
        }
    
        private Color HSVtoRGB(float h, float s, float v) {
            float f, p, q, t;
            if (s == 0) {
                return makeColor(v, v, v);
            }
    
            h /= 60;
            int i = (int) Math.floor(h);
            f = h - i;
            p = v * (1 - s);
            q = v * (1 - s * f);
            t = v * (1 - s * (1 - f));
            switch (i) {
            case 0:
                return makeColor(v, t, p);
            case 1:
                return makeColor(q, v, p);
            case 2:
                return makeColor(p, v, t);
            case 3:
                return makeColor(p, q, v);
            case 4:
                return makeColor(t, p, v);
            default:
                return makeColor(v, p, q);
            }
        }
    
        private Color makeColor(float r, float g, float b) {
            return new Color(r, g, b);
        }
    
        class Color {
            float r, g, b;
    
            public Color(float r, float g, float b) {
                super();
                this.r = r * 256;
                this.g = g * 256;
                this.b = b * 256;
            }
    
            public Color() {
                super();
            }
    
            public float getR() {
                return r;
            }
    
            public void setR(float r) {
                this.r = r;
            }
    
            public float getG() {
                return g;
            }
    
            public void setG(float g) {
                this.g = g;
            }
    
            public float getB() {
                return b;
            }
    
            public void setB(float b) {
                this.b = b;
            }
    
        }
    }
  • 相关阅读:
    js关闭窗口
    利用DotNetZip服务端压缩文件并下载
    .net 文件下载
    js在一定时间内跳转页面及各种页面刷新
    hosts 配置
    js判断字段是否为空 isNull
    js enter键激发事件
    解决iframe在移动端(主要iPhone)上的问题
    17年年终总结——走过2017,迎来2018Flag
    Node.js系列-express(上)
  • 原文地址:https://www.cnblogs.com/sm21312/p/6808956.html
Copyright © 2020-2023  润新知