我假设用6位数字表示一些十六进制代码,如#ff0000(红色).如果将它们视为随机24位整数,那么生成像这样的随机代码非常简单.也就是说,一个介于0和2 ^ 24之间的随机数.1.如下:
def randomRgbCode() {
def rgb = new Random().nextInt(1 << 24) // A random 24-bit integer
'#' + Integer.toString(rgb, 16).padLeft(6, '0')
}
Run Code Online (Sandbox Code Playgroud)
这些东西生成的颜色代码非常随机,但看起来不太好; 很多灰色的颜色都是一些生动的颜色.这些是该功能生成的一些颜色.
可以通过随机HSL值而不是RGB 来实现更生动的colos ,例如生成随机色调,高饱和度和中等亮度.如果您将这些颜色用于CSS样式,那么生成颜色代码非常容易,因为CSS现在支持HSL值:
def randomHslCode() {
def rnd = new Random()
def h = rnd.nextInt(360)
int s = 65 + rnd.nextInt(35) // Quite saturated
def l = 50
"hsl($h, $s%, $l%)"
}
Run Code Online (Sandbox Code Playgroud)
这些是这个新功能生成的一些颜色.如你所见,更加生动.
现在,如果您不打算在CSS样式中使用颜色代码并且需要生成RGB代码,那么您可以生成如上所述的随机HSL值,然后将这些值转换为RGB.这个过程非常简单,但需要更多编码:
import static Math.abs
def floor(x) { x as int }
def randomVividRgbCode() {
def rnd = new Random()
def h = rnd.nextFloat()
def s = 0.65f + rnd.nextFloat() * 0.35f // Quite saturated
def l = 0.5f
rgbToColorCode(*hslToRgb(h, s, l))
}
def rgbToColorCode(r, g, b) {
def rgb = floor(r * 255) << 16 |
floor(g * 255) << 8 |
floor(b * 255)
'#' + Integer.toString(rgb, 16).padLeft(6, '0')
}
def hslToRgb(h, s, l) {
def c = (1 - abs(2 * l - 1)) * s // Chroma.
def h1 = h * 6
def x = c * (1 - abs(h1 % 2 - 1))
def rgb = h1 < 1 ? [c, x, 0] :
h1 < 2 ? [x, c, 0] :
h1 < 3 ? [0, c, x] :
h1 < 4 ? [0, x, c] :
h1 < 5 ? [x, 0, c] :
[c, 0, x]
def (r, g, b) = rgb
def m = l - c * 0.5
[r + m, g + m, b + m]
}
Run Code Online (Sandbox Code Playgroud)
我希望代码不是那么神秘:).这些是由它产生的一些颜色.
现在,您可能会注意到某些生成的颜色非常相似,如果您想要区分图表中的线条,这可能不是很好.你可以做些什么来避免这种情况有一个很好的托盘预定义和易于区分的颜色(你可以在互联网上找到很多颜色)并从那里挑选颜色.如果您的托盘中的颜色用完(也许图表中的线条数量没有限制),您可以使用上述某些方法或任何其他方法生成随机颜色:)
| 归档时间: |
|
| 查看次数: |
1004 次 |
| 最近记录: |