module Graphics.Image.Interface.Repa (
toRepaArray,
RSU(..), RPU(..), RSS(..), RPS(..)
) where
import Data.Array.Repa.Index
import qualified Data.Array.Repa as R
import Graphics.Image.Interface
import Graphics.Image.Interface.Repa.Generic
import Graphics.Image.Interface.Repa.Storable
import Graphics.Image.Interface.Repa.Unboxed
instance Exchangable RSU RSS where
exchange _ (SUImage (SScalar px)) = SSImage (SScalar px)
exchange _ (SUImage img) = SSImage . compute . SDImage . getDelayedS $ img
instance Exchangable RPU RPS where
exchange _ (PUImage (PScalar px)) = PSImage (PScalar px)
exchange _ (PUImage img) = PSImage . compute . PDImage . getDelayedP $ img
instance Exchangable RSS RSU where
exchange _ (SSImage (SScalar px)) = SUImage (SScalar px)
exchange _ (SSImage img) = SUImage . compute . SDImage . getDelayedS $ img
instance Exchangable RPS RPU where
exchange _ (PSImage (PScalar px)) = PUImage (PScalar px)
exchange _ (PSImage img) = PUImage . compute . PDImage . getDelayedP $ img
toRepaArray
:: (Array arr cs e, Array RSU cs e, Exchangable arr RSU)
=> Image arr cs e -> R.Array R.U DIM2 (Pixel cs e)
toRepaArray img =
case exchange RSU img of
(SUImage (STImage arr)) -> arr
(SUImage (SDImage arr)) -> R.computeS arr
(SUImage (SScalar px)) -> R.computeS $ R.fromFunction (Z :. 1 :. 1) $ const px