diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/library/lux/data/color/hsb.lux | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/stdlib/source/library/lux/data/color/hsb.lux b/stdlib/source/library/lux/data/color/hsb.lux index ede1ffd08..5e7216de0 100644 --- a/stdlib/source/library/lux/data/color/hsb.lux +++ b/stdlib/source/library/lux/data/color/hsb.lux @@ -92,7 +92,7 @@ (def up (-> Frac Nat) - (|>> (f.* rgb_factor) f.int .nat)) + (|>> (f.* rgb_factor) f.round f.int .nat)) (def .public (of_rgb it) (-> RGB @@ -101,30 +101,36 @@ green (..down (the rgb.#green it)) blue (..down (the rgb.#blue it)) - max (all f.max red green blue) - min (all f.min red green blue) + brightness (all f.max red green blue) + range (all f.min red green blue) - brightness max - diff (|> max (f.- min)) - saturation (if (f.= +0.0 max) + chroma (|> brightness (f.- range)) + saturation (if (f.= +0.0 brightness) +0.0 - (|> diff (f./ max)))] + (|> chroma (f./ brightness)))] (nominal.abstraction - [#hue (if (f.= max min) - ... Achromatic - +0.0 - ... Chromatic - (cond (f.= max red) - (|> green (f.- blue) (f./ diff) - (f.+ (if (f.< blue green) +6.0 +0.0))) - - (f.= max green) - (|> blue (f.- red) (f./ diff) - (f.+ +2.0)) - - ... (f.= max blue) - (|> red (f.- green) (f./ diff) - (f.+ +4.0)))) + [#hue (cond (f.= +0.0 chroma) + ... Achromatic + +0.0 + ... Chromatic + (and (f.= brightness red) + (not (f.= red blue))) + (|> green (f.- blue) + (f./ chroma) + (f.+ +0.0) + (f./ +6.0)) + + (f.= brightness green) + (|> blue (f.- red) + (f./ chroma) + (f.+ +2.0) + (f./ +6.0)) + + ... (f.= brightness blue) + (|> red (f.- green) + (f./ chroma) + (f.+ +4.0) + (f./ +6.0))) #saturation saturation #brightness brightness]))) @@ -140,7 +146,7 @@ t (|> +1.0 (f.- (|> +1.0 (f.- f) (f.* saturation))) (f.* brightness)) v brightness mod (|> i (f.% +6.0) f.int .nat) - + red (when mod 0 v 1 q 2 p 3 p 4 t 5 v _ (undefined)) green (when mod 0 t 1 v 2 v 3 q 4 p 5 p _ (undefined)) blue (when mod 0 p 1 p 2 t 3 v 4 v 5 q _ (undefined))] |