module Raster where
import Graphics.Gloss
import Control.Monad.Trans.Reader
import qualified Data.ByteString as B
import Data.Word
import Types
import ColorScheme
packRGBA :: (Float, Float, Float, Float) -> [Word8]
packRGBA (r, g, b, a) = map (fromIntegral . round) [r * 255, g * 255, b * 255, a * 255]
makeRasterPicture :: ReaderT ViewerCtx IO Picture
makeRasterPicture = do
vs <- asks vctxValTblData
(w, h) <- asks vctxValTblSize
colors <- mapM (\(_, v) -> colorFromValue v) vs
let rgbas = concatMap (packRGBA . rgbaOfColor) colors
let bs = B.pack rgbas
return $ bitmapOfByteString w h (BitmapFormat TopToBottom PxRGBA) bs False