在Java中创建随机颜色?

72

我想在Java应用程序的JPanel上绘制随机颜色的点。是否有创建随机颜色的方法?

13个回答

129

使用 random 库:

import java.util.Random;

然后创建一个随机生成器:

Random rand = new Random();

颜色可以分为红、绿和蓝三种,你可以通过创建随机的原色来创建新的随机颜色:

// Java 'Color' class takes 3 floats, from 0 to 1.
float r = rand.nextFloat();
float g = rand.nextFloat();
float b = rand.nextFloat();

最后,将主要颜色传递到构造函数中以创建颜色:

Color randomColor = new Color(r, g, b);
您还可以使用此方法创建不同的随机效果,例如创建更加强调某些颜色的随机颜色... 传入较少的绿色和蓝色以产生“更粉”的随机颜色。
// Will produce a random colour with more red in it (usually "pink-ish")
float r = rand.nextFloat();
float g = rand.nextFloat() / 2f;
float b = rand.nextFloat() / 2f;

为了确保只生成“浅色”颜色,您可以生成每个颜色元素始终大于0.5的颜色:

// Will produce only bright / light colours:
float r = rand.nextFloat() / 2f + 0.5;
float g = rand.nextFloat() / 2f + 0.5;
float b = rand.nextFloat() / 2f + 0.5;

有许多其他的颜色函数可以与Color类一起使用,例如使颜色更亮:

randomColor.brighter();

可以在这里阅读关于Color类的概述:http://download.oracle.com/javase/6/docs/api/java/awt/Color.html


2
你的代码只会产生明亮/浅色,不会起作用。next float不接受float或double作为参数,添加.5会使颜色超出范围。 - Xitcod13
@ThomasAhle 它将产生任何可能的颜色。我无法在图片中绘制出来。 :) - Greg
1
如上所建议,不再存在接受参数的nextFloat构造函数。 - giaffa86
如果你想要更多"紫色"调的颜色,需要进行哪些代码更改呢? - kabuto178
紫色由蓝色和红色组成,因此增加这两种颜色的数量或减少绿色的数量将使其更具紫色调。希望这可以帮到您。 - Greg

53

生成随机RGB值的一行代码:

new Color((int)(Math.random() * 0x1000000))

40

如果你想要漂亮、柔和的颜色,最好使用HLS系统。

final float hue = random.nextFloat();
// Saturation between 0.1 and 0.3
final float saturation = (random.nextInt(2000) + 1000) / 10000f;
final float luminance = 0.9f;
final Color color = Color.getHSBColor(hue, saturation, luminance);

1
你有这个生成器产生的一些颜色样本吗? - Thomas Ahle

18

复制粘贴以下内容以获取明亮的粉彩虹色

int R = (int)(Math.random()*256);
int G = (int)(Math.random()*256);
int B= (int)(Math.random()*256);
Color color = new Color(R, G, B); //random color, but can be bright or dull

//to get rainbow, pastel colors
Random random = new Random();
final float hue = random.nextFloat();
final float saturation = 0.9f;//1.0 for brilliant, 0.0 for dull
final float luminance = 1.0f; //1.0 for brighter, 0.0 for black
color = Color.getHSBColor(hue, saturation, luminance);

我更喜欢使用HSB方法来选择随机颜色。使用RGB系统可能会创建非常奇怪的组合。顺便提一下,色调值在HSB颜色模型中会被内部乘以360,以产生色调角度(Javadoc)。 - patrickGranite

9

如果你不想让它看起来很糟糕,我建议定义一个颜色数组列表,然后使用随机数生成器来选择一个颜色。

如果你想要一个真正随机的颜色,可以从0到255生成3个随机数,然后使用Color(int,int,int)构造函数创建一个新的Color实例。

Random randomGenerator = new Random();
int red = randomGenerator.nextInt(256);
int green = randomGenerator.nextInt(256);
int blue = randomGenerator.nextInt(256);

Color randomColour = new Color(red,green,blue);

1
而且这样,你可以轻松避免与背景颜色相同的点。 - sje397

7

我知道这篇回答有点晚,但我没看到其他人提到这个。

像Greg说的那样,你需要使用Random类。

Random rand = new Random();

但我要说的区别很简单,就是这样做:
Color color = new Color(rand.nextInt(0xFFFFFF));

就是这么简单!不需要生成多个不同的浮点数。


啊,这就是我可能刚才跳过它的原因。然而,额外的颜色不会有任何影响 :P - Shaun Wild

5
import android.graphics.Color;

import java.util.Random;

public class ColorDiagram {
    // Member variables (properties about the object)
    public String[] mColors = {
            "#39add1", // light blue
            "#3079ab", // dark blue
            "#c25975", // mauve
            "#e15258", // red
            "#f9845b", // orange
            "#838cc7", // lavender
            "#7d669e", // purple
            "#53bbb4", // aqua
            "#51b46d", // green
            "#e0ab18", // mustard
            "#637a91", // dark gray
            "#f092b0", // pink
            "#b7c0c7"  // light gray
    };

    // Method (abilities: things the object can do)
    public int getColor() {
        String color = "";

        // Randomly select a fact
        Random randomGenerator = new Random(); // Construct a new Random number generator
        int randomNumber = randomGenerator.nextInt(mColors.length);

        color = mColors[randomNumber];
        int colorAsInt = Color.parseColor(color);

        return colorAsInt;
    }
}

谢谢,我知道如何做...但我不想做,你帮我节省了时间! - Ryan Pelletier

5

我曾在Java中使用这种简单而巧妙的方法来创建随机颜色:

Random random = new Random();
        System.out.println(String.format("#%06x", random.nextInt(256*256*256)));

其中#%06x表示零填充的十六进制(始终为6个字符长)。


1
这是一个获取随机颜色的方法:

private static Random sRandom;

public static synchronized int randomColor() {
    if (sRandom == null) {
        sRandom = new Random();
    }
    return 0xff000000 + 256 * 256 * sRandom.nextInt(256) + 256 * sRandom.nextInt(256)
            + sRandom.nextInt(256);
}

好处:

  • 获得整数表示,可用于java.awt.Colorandroid.graphics.Color
  • 保持对Random的静态引用。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接