]> jfr.im git - z_archive/sierpinski.git/commitdiff
start on Bmp file handler
authorzonidjan <redacted>
Fri, 3 Nov 2017 02:57:53 +0000 (21:57 -0500)
committerzonidjan <redacted>
Fri, 3 Nov 2017 02:57:53 +0000 (21:57 -0500)
bmp.py [new file with mode: 0644]

diff --git a/bmp.py b/bmp.py
new file mode 100644 (file)
index 0000000..fc67e29
--- /dev/null
+++ b/bmp.py
@@ -0,0 +1,24 @@
+# bmp - bitmap processing
+
+from struct import unpack
+
+class FormatError(Exception): pass
+class MagicError(FileFormatError): pass
+class CompressionError(FormatError): pass
+class BppError(FormatError): pass
+
+class Bmp(object):
+       def __init__(self, fn_or_fo):
+               fo = fn_or_fo
+               if isinstance(fn_or_fo, basestring):
+                       fo = open(fn, 'rb')
+               self.fo = fo
+               self._read()
+       def _read(self):
+               header = self.fo.read(14)
+               magic, filesize, start_address = unpack("<2sI2x2xI", header)
+               if magic != "BM": raise MagicError("wrong BMP header magic")
+               dib = self.fo.read(40)
+               magic, pixelwidth, pixelheight, bpp, compression = unpack("<III2xHI4x4x4x4x4x", dib)
+               if magic != 40: raise MagicError("wrong DIB header magic")
+               if compression != 0: raise CompressionError("compression not supported")