module Data.Bitmap.Array.Internal
( BitmapArray(..)
) where
import Data.Array.Unboxed
import Data.Binary
import Data.Bitmap.Class
import Data.Bitmap.Pixel
import Data.Bitmap.Types
import Data.Serialize
newtype BitmapArray = BitmapArray {unwrapBitmapArray :: UArray (Integer, Integer) Word32}
deriving (Eq, Ord, Binary, Serialize)
instance Show BitmapArray where
show = show . unwrapBitmapArray
instance Bitmap BitmapArray where
type BIndexType BitmapArray = Integer
type BPixelType BitmapArray = PixelRGBA
depth = const Depth32RGBA
dimensions (BitmapArray a) =
let (_, (maxRow, maxColumn)) = bounds a
in (abs . succ $ maxColumn, abs . succ $ maxRow)
getPixel (BitmapArray a) = PixelRGBA . (a !)
constructPixels f (width, height) = let maxRow = abs . pred $ height
maxColumn = abs . pred $ width
f' = unwrapPixelRGBA . toPixelRGBA . f
in BitmapArray . array ((0, 0), (maxRow, maxColumn)) $ [(i, f' i) | row <- [0..maxRow], column <- [0..maxColumn], let i = (row, column)]