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;
            }
    
        }
    }
  • 相关阅读:
    14_部署LNMP环境、构建LNMP平台、地址重写
    13_搭建Nginx服务器、配置网页认证、基于域名的虚拟主机、ssl虚拟主机
    12_rsync+SSH同步
    11_DNS子域授权、分离解析、缓存DNS服务器
    10_自定义yum仓库、源码编译安装
    09_parted分区工具、交换分区、链路聚合
    08_简单MariaDB数据库的管理
    bzoj1396
    bzoj4154
    bzoj3489
  • 原文地址:https://www.cnblogs.com/sm21312/p/6808956.html
Copyright © 2011-2022 走看看