wright-0.1.0.2: src/Data/Wright/RGB/Compand.hs
module Data.Wright.RGB.Compand (compand, uncompand) where
import Data.Wright.Types
compand :: Gamma -> ℝ -> ℝ
compand gamma v = case gamma of
Gamma g -> v**(1/g)
SRGB -> if v <= 0.0031308 then 12.92*v else 1.055*v**(1/2.4)-0.055
LStar -> if v <= e then v*k/100 else 1.6*v**(1/3)-0.16
uncompand :: Gamma -> ℝ -> ℝ
uncompand gamma v = case gamma of
Gamma g -> v**g
SRGB -> if v <= 0.04045 then v/12.92 else ((v+0.055)/1.055)**2.4
LStar -> if v <= 0.08 then 100*v/k else ((v+0.16)/1.16)**3
e :: ℝ
e = 216/24389
k :: ℝ
k = 24389/27