module Data.Colour.RGBSpace.HSV
(RGB
,hsvView
,hue, saturation, value
,hsv
)
where
import Data.Colour.RGB
hsvView :: (Fractional a, Ord a) => RGB a -> (a,a,a)
hsvView :: RGB a -> (a, a, a)
hsvView rgb :: RGB a
rgb = (a
h,a
s,a
v)
where
(h :: a
h,_,_,s :: a
s,v :: a
v) = RGB a -> (a, a, a, a, a)
forall a. (Fractional a, Ord a) => RGB a -> (a, a, a, a, a)
hslsv RGB a
rgb
saturation :: (Fractional a, Ord a) => RGB a -> a
saturation :: RGB a -> a
saturation rgb :: RGB a
rgb = a
s
where
(_,_,_,s :: a
s,_) = RGB a -> (a, a, a, a, a)
forall a. (Fractional a, Ord a) => RGB a -> (a, a, a, a, a)
hslsv RGB a
rgb
value :: (Fractional a, Ord a) => RGB a -> a
value :: RGB a -> a
value rgb :: RGB a
rgb = a
v
where
(_,_,_,_,v :: a
v) = RGB a -> (a, a, a, a, a)
forall a. (Fractional a, Ord a) => RGB a -> (a, a, a, a, a)
hslsv RGB a
rgb
hsv :: (RealFrac a, Ord a) => a -> a -> a -> RGB a
hsv :: a -> a -> a -> RGB a
hsv h :: a
h s :: a
s v :: a
v = case Integer
hi of
0 -> a -> a -> a -> RGB a
forall a. a -> a -> a -> RGB a
RGB a
v a
t a
p
1 -> a -> a -> a -> RGB a
forall a. a -> a -> a -> RGB a
RGB a
q a
v a
p
2 -> a -> a -> a -> RGB a
forall a. a -> a -> a -> RGB a
RGB a
p a
v a
t
3 -> a -> a -> a -> RGB a
forall a. a -> a -> a -> RGB a
RGB a
p a
q a
v
4 -> a -> a -> a -> RGB a
forall a. a -> a -> a -> RGB a
RGB a
t a
p a
v
5 -> a -> a -> a -> RGB a
forall a. a -> a -> a -> RGB a
RGB a
v a
p a
q
where
hi :: Integer
hi = a -> Integer
forall a b. (RealFrac a, Integral b) => a -> b
floor (a
ha -> a -> a
forall a. Fractional a => a -> a -> a
/60) Integer -> Integer -> Integer
forall a. Integral a => a -> a -> a
`mod` 6
f :: a
f = a -> a
forall p. RealFrac p => p -> p
mod1 (a
ha -> a -> a
forall a. Fractional a => a -> a -> a
/60)
p :: a
p = a
va -> a -> a
forall a. Num a => a -> a -> a
*(1a -> a -> a
forall a. Num a => a -> a -> a
-a
s)
q :: a
q = a
va -> a -> a
forall a. Num a => a -> a -> a
*(1a -> a -> a
forall a. Num a => a -> a -> a
-a
fa -> a -> a
forall a. Num a => a -> a -> a
*a
s)
t :: a
t = a
va -> a -> a
forall a. Num a => a -> a -> a
*(1a -> a -> a
forall a. Num a => a -> a -> a
-(1a -> a -> a
forall a. Num a => a -> a -> a
-a
f)a -> a -> a
forall a. Num a => a -> a -> a
*a
s)