File: Compression.hs

package info (click to toggle)
haskell-bmp 1.2.6.4-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 124 kB
  • sloc: haskell: 911; makefile: 2
file content (44 lines) | stat: -rw-r--r-- 1,278 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
{-# OPTIONS_HADDOCK hide #-}
module Codec.BMP.Compression
        (Compression(..))
where
import Data.Word
import Data.Binary
import Data.Binary.Get  
import Data.Binary.Put


-- | The Compression mode says how the image data is encoded in the file.
data Compression
        = CompressionRGB
        | CompressionRLE8
        | CompressionRLE4
        | CompressionBitFields
        | CompressionJPEG
        | CompressionPNG
        | CompressionUnknown Word32
        deriving (Show, Eq)


instance Binary Compression where
 get
  = do  c       <- getWord32le
        case c of
         0      -> return $ CompressionRGB
         1      -> return $ CompressionRLE8
         2      -> return $ CompressionRLE4
         3      -> return $ CompressionBitFields
         4      -> return $ CompressionJPEG
         5      -> return $ CompressionPNG
         _      -> return $ CompressionUnknown c
        
 put c
  = case c of
        CompressionRGB          -> putWord32le 0
        CompressionRLE8         -> putWord32le 1
        CompressionRLE4         -> putWord32le 2
        CompressionBitFields    -> putWord32le 3
        CompressionJPEG         -> putWord32le 4
        CompressionPNG          -> putWord32le 5
        CompressionUnknown x    -> putWord32le x