Конвертировать только оттенок в RGB - PullRequest
0 голосов
/ 17 апреля 2020

Какой самый простой способ преобразовать цвет HSV в RGB, но где насыщенность и значение известны равны 100%?

Я программирую на Go, но любой алгоритм c ответ тоже подойдет. Мое значение оттенка 0.0 <= hue <= 1.0 raw, но преобразование в градусы тривиально.

Пример вывода:

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

1 Ответ

2 голосов
/ 17 апреля 2020

Реализация алгоритма «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, если это то, что вам нужно.

...