Go语言 示例程序创建一对随机的明亮和黑暗的十六进制颜色代码

xpcnnkqh  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(121)

在我的应用程序中,我有一个文本和文本周围的背景框。我想要的是给它们两个分配颜色。现在我随机创建一个颜色通过以下方法

R: uint8(rand.Intn(255)),
    G: uint8(rand.Intn(255)),
    B: uint8(rand.Intn(255)),

现在我采用了一种方法来创建兼容的十六进制颜色通过以下方法

R: 255 - color.R,
    G: 255 - color.G,
    B: 255 - color.B,

但是通过这种方法颜色不兼容。我觉得一个颜色应该深一个颜色应该浅一点。我在stackoverflow中看到计算亮度来确定颜色是暗还是亮。但是我没有得到一个正确的方法。简而言之,我想要一个程序,用于创建两个兼容的十六进制颜色代码。

yjghlzjz

yjghlzjz1#

如果我理解正确的话,你可以使用以下代码:
通知:亮度=(0.299 * R + 0.587 * G + 0.114 * B)/ 255)

type Color struct {
    R uint8
    G uint8
    B uint8
}

func generateRandomColor() Color {
    return Color{
        R: uint8(rand.Intn(256)),
        G: uint8(rand.Intn(256)),
        B: uint8(rand.Intn(256)),
    }
}

func calculateBrightness(color Color) float64 {
    return (0.299*float64(color.R) + 0.587*float64(color.G) + 0.114*float64(color.B)) / 255
}

func generateCompatibleColors() (Color, Color) {
    color1 := generateRandomColor()
    color2 := Color{
        R: 255 - color1.R,
        G: 255 - color1.G,
        B: 255 - color1.B,
    }

    brightness1 := calculateBrightness(color1)
    brightness2 := calculateBrightness(color2)

    if brightness1 > brightness2 {
        color1, color2 = color2, color1
    }

    return color1, color2
}

func colorToHex(color Color) string {
    return fmt.Sprintf("#%02X%02X%02X", color.R, color.G, color.B)
}

func main() {
    rand.Seed(time.Now().UnixNano())

    color1, color2 := generateCompatibleColors()

    fmt.Printf("RGB : Color 1 : %v, Color 2 : %v\n", color1, color2)
    fmt.Printf("HEX : Color 1 : %v, Color 2 : %v", colorToHex(color1), colorToHex(color2))
}

相关问题