]>
Commit | Line | Data |
---|---|---|
596cd671 | 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") |