module Data.Colour.RGBSpace.HSL
(RGB
,hslView
,hue, saturation, lightness
,hsl
)
where
import Data.Colour.RGB
hslView :: (Fractional a, Ord a) => RGB a -> (a,a,a)
hslView :: RGB a -> (a, a, a)
hslView rgb :: RGB a
rgb = (a
h,a
s,a
l)
where
(h :: a
h,s :: a
s,l :: a
l,_,_) = 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
lightness :: (Fractional a, Ord a) => RGB a -> a
lightness :: RGB a -> a
lightness rgb :: RGB a
rgb = a
l
where
(_,_,l :: a
l,_,_) = RGB a -> (a, a, a, a, a)
forall a. (Fractional a, Ord a) => RGB a -> (a, a, a, a, a)
hslsv RGB a
rgb
hsl :: (RealFrac a, Ord a) => a -> a -> a -> RGB a
hsl :: a -> a -> a -> RGB a
hsl h :: a
h s :: a
s l :: a
l = (a -> a) -> RGB a -> RGB a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> a
component RGB a
t
where
hk :: a
hk = a
ha -> a -> a
forall a. Fractional a => a -> a -> a
/360
tr :: a
tr = a -> a
forall p. RealFrac p => p -> p
mod1 (a
hk a -> a -> a
forall a. Num a => a -> a -> a
+ 1a -> a -> a
forall a. Fractional a => a -> a -> a
/3)
tg :: a
tg = a -> a
forall p. RealFrac p => p -> p
mod1 a
hk
tb :: a
tb = a -> a
forall p. RealFrac p => p -> p
mod1 (a
hk a -> a -> a
forall a. Num a => a -> a -> a
- 1a -> a -> a
forall a. Fractional a => a -> a -> a
/3)
t :: RGB a
t = a -> a -> a -> RGB a
forall a. a -> a -> a -> RGB a
RGB a
tr a
tg a
tb
q :: a
q | a
l a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< 0.5 = a
la -> a -> a
forall a. Num a => a -> a -> a
*(1a -> a -> a
forall a. Num a => a -> a -> a
+a
s)
| Bool
otherwise = a
l a -> a -> a
forall a. Num a => a -> a -> a
+ a
s a -> a -> a
forall a. Num a => a -> a -> a
- a
la -> a -> a
forall a. Num a => a -> a -> a
*a
s
p :: a
p = 2a -> a -> a
forall a. Num a => a -> a -> a
*a
l a -> a -> a
forall a. Num a => a -> a -> a
- a
q
component :: a -> a
component t :: a
t | a
t a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< 1a -> a -> a
forall a. Fractional a => a -> a -> a
/6 = a
p a -> a -> a
forall a. Num a => a -> a -> a
+ ((a
qa -> a -> a
forall a. Num a => a -> a -> a
-a
p)a -> a -> a
forall a. Num a => a -> a -> a
*6a -> a -> a
forall a. Num a => a -> a -> a
*a
t)
| a
t a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< 1a -> a -> a
forall a. Fractional a => a -> a -> a
/2 = a
q
| a
t a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< 2a -> a -> a
forall a. Fractional a => a -> a -> a
/3 = a
p a -> a -> a
forall a. Num a => a -> a -> a
+ ((a
qa -> a -> a
forall a. Num a => a -> a -> a
-a
p)a -> a -> a
forall a. Num a => a -> a -> a
*6a -> a -> a
forall a. Num a => a -> a -> a
*(2a -> a -> a
forall a. Fractional a => a -> a -> a
/3a -> a -> a
forall a. Num a => a -> a -> a
-a
t))
| Bool
otherwise = a
p