module FreeGame.Data.Bitmap (
Bitmap(..)
,bitmapSize
,liftBitmapIO
,readBitmap
,writeBitmap
,cropBitmap
,sizeBitmap
,clipBitmap
) where
import qualified Codec.Picture as C
import qualified Codec.Picture.RGBA8 as C
import Control.Monad.IO.Class
import Data.BoundingBox
import Linear.V2
import System.Random
import Control.Applicative
import Data.Hashable
data Bitmap = Bitmap (C.Image C.PixelRGBA8) Int
bitmapSize :: Bitmap -> (Int, Int)
bitmapSize (Bitmap (C.Image w h _) _) = (w, h)
liftBitmapIO :: MonadIO m => C.Image C.PixelRGBA8 -> m Bitmap
liftBitmapIO b = liftIO $ Bitmap b <$> randomIO
readBitmap :: MonadIO m => FilePath -> m Bitmap
readBitmap path = liftIO $ Bitmap <$> C.readImageRGBA8 path <*> randomIO
writeBitmap :: MonadIO m => FilePath -> Bitmap -> m ()
writeBitmap path (Bitmap p _) = liftIO $ C.writePng path p
cropBitmap :: Bitmap
-> (Int, Int)
-> (Int, Int)
-> Bitmap
cropBitmap (Bitmap b k) (w, h) (x, y) = Bitmap
(C.trimImage b (w, h) (x, y))
(hash (w, h, x, y, k))
clipBitmap :: Bitmap -> Box V2 Int -> Bitmap
clipBitmap (Bitmap b k) (Box (V2 x0 y0) (V2 x1 y1)) = Bitmap
(C.trimImage b (x1 x0, y1 y0) (x0, y0))
(hash (x0, y0, x1, y1, k))
sizeBitmap :: Bitmap -> V2 Int
sizeBitmap (Bitmap (C.Image w h _) _) = V2 w h