]>
jfr.im git - z_archive/sierpinski.git/blob - bmp.py
1 # bmp - bitmap processing
2 # ref: https://en.wikipedia.org/wiki/BMP_file_format
4 from struct
import unpack
6 class FormatError(Exception): pass
7 class MagicError(FileFormatError
): pass
8 class CompressionError(FormatError
): pass
9 class BppError(FormatError
): pass
12 def __init__(self
, fn_or_fo
):
14 if isinstance(fn_or_fo
, basestring
):
19 header
= self
.fo
.read(14)
20 magic
, filesize
, start_address
= unpack("<2sI2x2xI", header
)
21 if magic
!= "BM": raise MagicError("wrong BMP header magic")
22 dib
= self
.fo
.read(40)
23 magic
, pixelwidth
, pixelheight
, bpp
, compression
= unpack("<III2xHI4x4x4x4x4x", dib
)
24 if magic
!= 40: raise MagicError("wrong DIB header magic")
25 if compression
!= 0: raise CompressionError("compression not supported")