zoukankan      html  css  js  c++  java
  • 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;
            }
    
        }
    }
  • 相关阅读:
    ORACLE定时备份
    解压cpio.gz
    Fusioncharts的数字格式化
    linux apache+php+mysql安装及乱码解决办法
    两个Beta函数类型的积分及其一般形式
    【转载】巴塞尔问题(Basel Problem)的多种解法
    两本关于各种刁钻积分计算的书
    一个超几何函数类型的积分
    一个取整函数积分的一般形式
    Clausen Functions (and related series, functions, integrals)
  • 原文地址:https://www.cnblogs.com/sm21312/p/6808956.html
Copyright © 2011-2022 走看看