java 隨機顏色

用HSV模型來實現顏色的隨機,而後轉爲RGB模型java

  • 色相(H)是色彩的基本屬性,就是日常所說的顏色名稱,如紅色、黃色等。
  • 飽和度(S)是指色彩的純度,越高色彩越純,低則逐漸變灰,取0-100%的數值。
  • 明度(V),亮度(L),取0-100%。

後兩項若是寫成固定值的話,那麼色調會比較統一,如下爲代碼dom

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;
        }

    }
}
相關文章
相關標籤/搜索