33 lines
912 B
Haskell
33 lines
912 B
Haskell
module Bitmap.BW(module Bitmap.BW) where
|
|
|
|
import Bitmap
|
|
import Control.Monad.ST
|
|
|
|
newtype BW = BW Bool deriving (Eq, Ord)
|
|
|
|
instance Color BW where
|
|
luminance (BW False) = 0
|
|
luminance _ = 255
|
|
black = BW False
|
|
white = BW True
|
|
toNetpbm [] = ""
|
|
toNetpbm l = init (concatMap f line) ++ "\n" ++ toNetpbm rest
|
|
where (line, rest) = splitAt 35 l
|
|
f (BW False) = "1 "
|
|
f _ = "0 "
|
|
fromNetpbm = map f
|
|
where f 1 = black
|
|
f _ = white
|
|
netpbmMagicNumber _ = "P1"
|
|
netpbmMaxval _ = ""
|
|
|
|
toBWImage :: Color c => Image s c -> ST s (Image s BW)
|
|
toBWImage = toBWImage' 128
|
|
|
|
toBWImage' :: Color c => Int -> Image s c -> ST s (Image s BW)
|
|
{- The first argument gives the darkest luminance assigned
|
|
to white. -}
|
|
toBWImage' darkestWhite = mapImage $ f . luminance
|
|
where f x | x < darkestWhite = black
|
|
| otherwise = white
|