{-# LANGUAGE TypeOperators #-}
module Data.Raster (
Raster,PNG,BMP,JPG,bmp,jpg,png,raster,
) where
import Algebra
import Data.Serialize
import Codec.Picture
data Raster = Raster DynamicImage
newtype JPG = JPG Raster
newtype PNG = PNG Raster
newtype BMP = BMP Raster
jpg :: Raster:<->:JPG
jpg = iso JPG (\(JPG r) -> r)
bmp :: Raster:<->:BMP
bmp = iso BMP (\(BMP r) -> r)
png :: Raster:<->:PNG
png = iso PNG (\(PNG r) -> r)
instance Serializable JPG where
encode (yb (raster.jpg) -> ImageYCbCr8 i) = encodeJpeg i^.bytesBuilder
encode _ = error "Unsupported image format for JPeg encoding"
serializable = convert.decodeJpeg.by chunk^.mapping (mapping (raster.jpg.pureWriter)).parser
instance Serializable PNG where
encode (yb (raster.png) -> i) = (error<|>by bytesBuilder) (encodeDynamicPng i)
serializable = convert.decodePng.by chunk^.mapping (mapping (raster.png.pureWriter)).parser
instance Serializable BMP where
encode (yb (raster.bmp) -> i) = (error<|>by bytesBuilder) (encodeDynamicBitmap i)
serializable = convert.decodeBitmap.by chunk^.mapping (mapping (raster.bmp.pureWriter)).parser
raster :: DynamicImage:<->:Raster
raster = iso Raster (\(Raster i) -> i)