【问题标题】:Convert just a hue into RGB仅将色调转换为 RGB
【发布时间】:2020-07-31 06:35:42
【问题描述】:

将 HSV 颜色转换为 RGB 的最简单方法是什么,但饱和度和值已知为 100%?

我正在使用 Go 进行编程,但任何算法答案都可以。我的色调值为0.0 <= hue <= 1.0 raw,但转换为度数很简单。

示例输出:

hueToRGB(0.0)     =  (255, 0, 0)
hueToRGB(0.33333) =  (0, 255, 0)
hueToRGB(0.4)     =  (0, 255, 102)

【问题讨论】:

  • 最简单的方式是func hueToRGB(_ float64) (byte, byte, byte) {return 255,0,0}。你不能再简单了。因为这不是关于围棋的问题:你为什么不采用任何算法?
  • 我不明白,那个函数只是返回一个 100% 的红色。我只是在寻找一种可以在知道它是 100% 强度和 100% 值(但色调不同)时可以简化的颜色转换

标签: go colors rgb hsv


【解决方案1】:

wikipedia 实现“HSV 到 RGB 替代”算法,专门针对 s = v = 1 给出:

package main

import (
    "fmt"
    "math"
)

func min3(a, b, c float64) float64 {
    return math.Min(math.Min(a, b), c)
}

func hueToRGB(h float64) (float64, float64, float64) {
    kr := math.Mod(5+h*6, 6)
    kg := math.Mod(3+h*6, 6)
    kb := math.Mod(1+h*6, 6)

    r := 1 - math.Max(min3(kr, 4-kr, 1), 0)
    g := 1 - math.Max(min3(kg, 4-kg, 1), 0)
    b := 1 - math.Max(min3(kb, 4-kb, 1), 0)

    return r, g, b
}

func main() {
    for h := 0.0; h < 1; h += 0.05 {
        r, g, b := hueToRGB(h)
        fmt.Println(h, r, g, b)
    }
}

这会在 0 到 1 的范围内将红色、绿色和蓝色作为 float64,但如果您需要的话,应该很容易将它们转换为 uint8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-14
    • 2011-03-02
    • 2011-05-05
    • 2013-12-10
    • 2011-01-26
    • 2011-01-04
    • 2019-07-06
    • 1970-01-01
    相关资源
    最近更新 更多