{-# LANGUAGE RecordWildCards #-}
module Tone_map where
import Elem3D ( RGB(..), elevateRGBPoint )
{-# INLINE clamp #-}
clamp :: Float -> [RGB] -> [RGB]
clamp :: Float -> [RGB] -> [RGB]
clamp Float
x = (RGB -> RGB) -> [RGB] -> [RGB]
forall a b. (a -> b) -> [a] -> [b]
map (\(RGB {Float
blue :: RGB -> Float
green :: RGB -> Float
red :: RGB -> Float
blue :: Float
green :: Float
red :: Float
..}) -> Float -> Float -> Float -> RGB
RGB (Float -> Float -> Float
forall a. Ord a => a -> a -> a
min Float
x Float
red) (Float -> Float -> Float
forall a. Ord a => a -> a -> a
min Float
x Float
green) (Float -> Float -> Float
forall a. Ord a => a -> a -> a
min Float
x Float
blue))
{-# INLINE ecualization #-}
ecualization :: Float -> [RGB] -> [RGB]
ecualization :: Float -> [RGB] -> [RGB]
ecualization Float
x = (RGB -> RGB) -> [RGB] -> [RGB]
forall a b. (a -> b) -> [a] -> [b]
map (\(RGB {Float
blue :: Float
green :: Float
red :: Float
blue :: RGB -> Float
green :: RGB -> Float
red :: RGB -> Float
..}) -> Float -> Float -> Float -> RGB
RGB (Float
red Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
x) (Float
green Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
x) (Float
blue Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
x))
{-# INLINE ecualization' #-}
ecualization' :: Float -> [RGB] -> [RGB]
ecualization' :: Float -> [RGB] -> [RGB]
ecualization' Float
x = (RGB -> RGB) -> [RGB] -> [RGB]
forall a b. (a -> b) -> [a] -> [b]
map (\(RGB {Float
blue :: Float
green :: Float
red :: Float
blue :: RGB -> Float
green :: RGB -> Float
red :: RGB -> Float
..}) -> Float -> Float -> Float -> RGB
RGB (Float
red Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
x) (Float
green Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
x) (Float
blue Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
x))
{-# INLINE elevateRGBPoints #-}
elevateRGBPoints :: Float -> [RGB] -> [RGB]
elevateRGBPoints :: Float -> [RGB] -> [RGB]
elevateRGBPoints Float
x = (RGB -> RGB) -> [RGB] -> [RGB]
forall a b. (a -> b) -> [a] -> [b]
map (Float -> RGB -> RGB
elevateRGBPoint Float
x)
{-# INLINE gammaFunc #-}
gammaFunc :: Float -> Float -> [RGB] -> [RGB]
gammaFunc :: Float -> Float -> [RGB] -> [RGB]
gammaFunc Float
x Float
gamma = Float -> [RGB] -> [RGB]
ecualization' Float
1 ([RGB] -> [RGB]) -> ([RGB] -> [RGB]) -> [RGB] -> [RGB]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> [RGB] -> [RGB]
elevateRGBPoints Float
gamma ([RGB] -> [RGB]) -> ([RGB] -> [RGB]) -> [RGB] -> [RGB]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> [RGB] -> [RGB]
ecualization Float
x
{-# INLINE gammaFunc' #-}
gammaFunc' :: Float -> Float -> [RGB] -> [RGB]
gammaFunc' :: Float -> Float -> [RGB] -> [RGB]
gammaFunc' Float
x Float
gamma = Float -> [RGB] -> [RGB]
ecualization' Float
1 ([RGB] -> [RGB]) -> ([RGB] -> [RGB]) -> [RGB] -> [RGB]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> [RGB] -> [RGB]
elevateRGBPoints (Float
1 Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
gamma) ([RGB] -> [RGB]) -> ([RGB] -> [RGB]) -> [RGB] -> [RGB]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> [RGB] -> [RGB]
ecualization Float
x