]> jfr.im git - z_archive/sierpinski.git/blob - bmp.py
start on Bmp file handler
[z_archive/sierpinski.git] / bmp.py
1 # bmp - bitmap processing
2
3 from struct import unpack
4
5 class FormatError(Exception): pass
6 class MagicError(FileFormatError): pass
7 class CompressionError(FormatError): pass
8 class BppError(FormatError): pass
9
10 class Bmp(object):
11 def __init__(self, fn_or_fo):
12 fo = fn_or_fo
13 if isinstance(fn_or_fo, basestring):
14 fo = open(fn, 'rb')
15 self.fo = fo
16 self._read()
17 def _read(self):
18 header = self.fo.read(14)
19 magic, filesize, start_address = unpack("<2sI2x2xI", header)
20 if magic != "BM": raise MagicError("wrong BMP header magic")
21 dib = self.fo.read(40)
22 magic, pixelwidth, pixelheight, bpp, compression = unpack("<III2xHI4x4x4x4x4x", dib)
23 if magic != 40: raise MagicError("wrong DIB header magic")
24 if compression != 0: raise CompressionError("compression not supported")