Реализация алгоритма «HSV to RGB альтернатива» из wikipedia , специализированного для 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)
}
}
Это дает красный, зеленый и синий как float64
в диапазоне от 0 до 1, но должно быть легко преобразовать их в uint8
, если это то, что вам нужно.