module Data.Array.Repa.Algorithms.Pixel
( floatRmsOfRGB8
, doubleRmsOfRGB8
, floatLuminanceOfRGB8
, doubleLuminanceOfRGB8
, rgb8OfGreyFloat
, rgb8OfGreyDouble
, rgb8OfFloat
, rgb8OfDouble)
where
import Data.Word
floatRmsOfRGB8 :: (Word8, Word8, Word8) -> Float
floatRmsOfRGB8 (r, g, b)
= let r' = fromIntegral (fromIntegral r :: Int) / 255
g' = fromIntegral (fromIntegral g :: Int) / 255
b' = fromIntegral (fromIntegral b :: Int) / 255
s = ((r' * r') + (g' * g') + (b' * b')) / 3
in sqrt s
doubleRmsOfRGB8 :: (Word8, Word8, Word8) -> Float
doubleRmsOfRGB8 (r, g, b)
= let r' = fromIntegral (fromIntegral r :: Int) / 255
g' = fromIntegral (fromIntegral g :: Int) / 255
b' = fromIntegral (fromIntegral b :: Int) / 255
s = ((r' * r') + (g' * g') + (b' * b')) / 3
in sqrt s
floatLuminanceOfRGB8 :: (Word8, Word8, Word8) -> Float
floatLuminanceOfRGB8 (r, g, b)
= let r' = fromIntegral (fromIntegral r :: Int) / 255
g' = fromIntegral (fromIntegral g :: Int) / 255
b' = fromIntegral (fromIntegral b :: Int) / 255
in r' * 0.3 + g' * 0.59 + b' * 0.11
doubleLuminanceOfRGB8 :: (Word8, Word8, Word8) -> Double
doubleLuminanceOfRGB8 (r, g, b)
= let r' = fromIntegral (fromIntegral r :: Int) / 255
g' = fromIntegral (fromIntegral g :: Int) / 255
b' = fromIntegral (fromIntegral b :: Int) / 255
in r' * 0.3 + g' * 0.59 + b' * 0.11
rgb8OfGreyFloat :: Float -> (Word8, Word8, Word8)
rgb8OfGreyFloat x
= let v = fromIntegral (truncate (x * 255) :: Int)
in (v, v, v)
rgb8OfGreyDouble :: Double -> (Word8, Word8, Word8)
rgb8OfGreyDouble x
= let v = fromIntegral (truncate (x * 255) :: Int)
in (v, v, v)
rgb8OfFloat :: (Float, Float, Float) -> (Word8, Word8, Word8)
rgb8OfFloat (r, g, b)
= let r8 = fromIntegral (truncate (r * 255) :: Int)
g8 = fromIntegral (truncate (g * 255) :: Int)
b8 = fromIntegral (truncate (b * 255) :: Int)
in (r8, g8, b8)
rgb8OfDouble :: (Double, Double, Double) -> (Word8, Word8, Word8)
rgb8OfDouble (r, g, b)
= let r8 = fromIntegral (truncate (r * 255) :: Int)
g8 = fromIntegral (truncate (g * 255) :: Int)
b8 = fromIntegral (truncate (b * 255) :: Int)
in (r8, g8, b8)