Zuletzt aktiv 1748938254

aneuhaeuser hat die Gist bearbeitet 1748938254. Zu Änderung gehen

Keine Änderungen

aneuhaeuser hat die Gist bearbeitet 1748890694. Zu Änderung gehen

Keine Änderungen

aneuhaeuser hat die Gist bearbeitet 1748890559. Zu Änderung gehen

1 file changed, 62 insertions

bmp.py(Datei erstellt)

@@ -0,0 +1,62 @@
1 + class BMPImage:
2 + def __init__(self, data):
3 + self.data = data
4 + self._get_bmp_header()
5 + self._get_bmp_info_header()
6 + self._get_bmp_color_table()
7 +
8 + offset = self.header["offset"]
9 +
10 + self.BITMAP = memoryview(data[offset:])
11 + self.HEIGHT = self.info_header["height"]
12 + self.WIDTH = self.info_header["width"]
13 + self.COLORS = self.info_header["colors_used"]
14 + self.BPP = self.info_header["bit_count"] # Bits per pixel
15 + self.PALLETTE = self.color_table
16 +
17 + def _get_bmp_header(self):
18 + d = self.data
19 + self.header = {
20 + "signature": d[0:2].decode("ascii"),
21 + "file_size": int.from_bytes(data[2:6], "little"),
22 + "offset": int.from_bytes(data[10:14], "little"),
23 + "header_size": int.from_bytes(data[14:18], "little"),
24 + }
25 +
26 + def _get_bmp_info_header(self):
27 + offset = 14 # BMP header size
28 + data = self.data[offset:]
29 +
30 + self.info_header = {
31 + "size": int.from_bytes(data[0:4], "little"),
32 + "width": int.from_bytes(data[4:8], "little"),
33 + "height": int.from_bytes(data[8:12], "little"),
34 + "planes": int.from_bytes(data[12:14], "little"),
35 + "bit_count": int.from_bytes(data[14:16], "little"),
36 + "compression": int.from_bytes(data[16:20], "little"),
37 + "image_size": int.from_bytes(data[20:24], "little"),
38 + "x_pixels_per_meter": int.from_bytes(data[24:28], "little"),
39 + "y_pixels_per_meter": int.from_bytes(data[28:32], "little"),
40 + "colors_used": int.from_bytes(data[32:36], "little"),
41 + "important_colors": int.from_bytes(data[36:40], "little"),
42 + }
43 +
44 +
45 + def _get_bmp_color_table(self):
46 + bpp = self.info_header["bit_count"]
47 + color_amount = self.info_header["colors_used"]
48 +
49 + if bpp > 8:
50 + self.color_table = []
51 + return
52 +
53 + if color_amount == 0:
54 + color_amount = 2 ** bpp
55 +
56 + offset = 14 + 40 # File header + Info header
57 + data = self.data[offset:offset + color_amount * 4]
58 +
59 + self.color_table = [
60 + int.from_bytes(data[i:i+4], "little")
61 + for i in range(0, len(data), 4)
62 + ]
Neuer Älter