Validate RSSI instance to allow user defined RSSI source (issue #5842) (#5846)
[opentx.git] / radio / util / img2lbm.py
blob44db758bd4ec1a8ea59412222d293276d858cd05
1 #!/usr/bin/env python
3 from __future__ import division, print_function
5 import sys
6 try:
7 from PyQt5 import Qt, QtGui
8 except:
9 from PyQt4 import Qt, QtGui
11 image = QtGui.QImage(sys.argv[1])
12 width, height = image.size().width(), image.size().height()
15 def writeSize(f, width, height):
16 if lcdwidth > 255:
17 f.write("%d,%d,%d,%d,\n" % (width % 256, width // 256, height % 256, height // 256))
18 else:
19 f.write("%d,%d,\n" % (width, height))
22 with open(sys.argv[2], "w") as f:
23 lcdwidth = int(sys.argv[3])
25 if len(sys.argv) > 4:
26 what = sys.argv[4]
27 else:
28 for s in ("03x05", "04x06", "05x07", "08x10", "10x14", "22x38"):
29 if s in sys.argv[2]:
30 what = s
31 break
33 if what == "1bit":
34 rows = 1
35 if len(sys.argv) > 5:
36 rows = int(sys.argv[5])
37 writeSize(f, width, height // rows)
38 for y in range(0, height, 8):
39 for x in range(width):
40 value = 0
41 for z in range(8):
42 if y + z < height and image.pixel(x, y + z) == Qt.qRgb(0, 0, 0):
43 value += 1 << z
44 f.write("0x%02x," % value)
45 f.write("\n")
46 elif what == "4/4/4/4":
47 constant = sys.argv[2].upper()[:-4]
48 values = []
49 for y in range(height):
50 for x in range(width):
51 pixel = image.pixel(x, y)
52 val = ((Qt.qAlpha(pixel) // 16) << 12) + ((Qt.qRed(pixel) // 16) << 8) + ((Qt.qGreen(pixel) // 16) << 4) + ((Qt.qBlue(pixel) // 16) << 0)
53 values.append(str(val))
54 f.write("const uint16_t __%s[] __ALIGNED = { %s };\n" % (constant, ",".join(values)))
55 f.write("const Bitmap %s(BMP_ARGB4444, %d, %d, __%s);\n" % (constant, width, height, constant))
56 elif what == "4/4/4/4-R":
57 constant = sys.argv[2].upper()[:-4]
58 values = []
59 for y in range(height):
60 for x in range(width):
61 pixel = image.pixel(width-x-1, height-y-1)
62 val = ((Qt.qAlpha(pixel) // 16) << 12) + ((Qt.qRed(pixel) // 16) << 8) + ((Qt.qGreen(pixel) // 16) << 4) + ((Qt.qBlue(pixel) // 16) << 0)
63 values.append(str(val))
64 f.write("const uint16_t __%s[] __ALIGNED = { %s };\n" % (constant, ",".join(values)))
65 f.write("const Bitmap %s(BMP_ARGB4444, %d, %d, __%s);\n" % (constant, width, height, constant))
66 elif what == "5/6/5":
67 constant = sys.argv[2].upper()[:-4]
68 values = []
69 for y in range(height):
70 for x in range(width):
71 pixel = image.pixel(x, y)
72 val = ((Qt.qRed(pixel) >> 3) << 11) + ((Qt.qGreen(pixel) >> 2) << 5) + ((Qt.qBlue(pixel) >> 3) << 0)
73 values.append(str(val))
74 f.write("const uint16_t __%s[] __ALIGNED = { %s };\n" % (constant, ",".join(values)))
75 f.write("const Bitmap %s(BMP_RGB565, %d, %d, __%s);\n" % (constant, width, height, constant))
76 elif what == "5/6/5-R":
77 constant = sys.argv[2].upper()[:-4]
78 values = []
79 for y in range(height):
80 for x in range(width):
81 pixel = image.pixel(width-x-1, height-y-1)
82 val = ((Qt.qRed(pixel) >> 3) << 11) + ((Qt.qGreen(pixel) >> 2) << 5) + ((Qt.qBlue(pixel) >> 3) << 0)
83 values.append(str(val))
84 f.write("const uint16_t __%s[] __ALIGNED = { %s };\n" % (constant, ",".join(values)))
85 f.write("const Bitmap %s(BMP_RGB565, %d, %d, __%s);\n" % (constant, width, height, constant))
86 elif what == "5/6/5/8":
87 colors = []
88 writeSize(f, width, height)
89 for y in range(height):
90 for x in range(width):
91 pixel = image.pixel(x, y)
92 val = ((Qt.qRed(pixel) >> 4) << 12) + ((Qt.qGreen(pixel) >> 4) << 7) + ((Qt.qBlue(pixel) >> 4) << 1)
93 f.write("%d,%d,%d," % (val % 256, val // 256, Qt.qAlpha(pixel)))
94 f.write("\n")
95 elif what == "4bits":
96 colors = []
97 writeSize(f, width, height)
98 for y in range(0, height, 2):
99 for x in range(width):
100 value = 0xFF
101 gray1 = Qt.qGray(image.pixel(x, y))
102 if y + 1 < height:
103 gray2 = Qt.qGray(image.pixel(x, y + 1))
104 else:
105 gray2 = Qt.qRgb(255, 255, 255)
106 for i in range(4):
107 if (gray1 & (1 << (4 + i))):
108 value -= 1 << i
109 if (gray2 & (1 << (4 + i))):
110 value -= 1 << (4 + i)
111 f.write("0x%02x," % value)
112 f.write("\n")
113 elif what == "8bits":
114 colors = []
115 writeSize(f, width, height)
116 for y in range(height):
117 for x in range(width):
118 value = Qt.qGray(image.pixel(x, y))
119 value = 0x0f - (value >> 4)
120 f.write("0x%02x," % value)
121 f.write("\n")
122 elif what == "03x05":
123 for y in range(0, height, 5):
124 for x in range(width):
125 value = 0
126 for z in range(5):
127 if image.pixel(x, y + z) == Qt.qRgb(0, 0, 0):
128 value += 1 << z
129 f.write("0x%02x," % value)
130 f.write("\n")
131 elif what == "04x06":
132 for y in range(0, height, 7):
133 for x in range(width):
134 value = 0
135 for z in range(7):
136 if image.pixel(x, y + z) == Qt.qRgb(0, 0, 0):
137 value += 1 << z
138 if value == 0x7f:
139 value = 0xff
140 f.write("0x%02x," % value)
141 f.write("\n")
142 elif what == "05x07":
143 for y in range(0, height, 8):
144 for x in range(width):
145 value = 0
146 for z in range(8):
147 if image.pixel(x, y + z) == Qt.qRgb(0, 0, 0):
148 value += 1 << z
149 f.write("0x%02x," % value)
150 f.write("\n")
151 elif what == "08x10":
152 for y in range(0, height, 12):
153 for x in range(width):
154 skip = True
155 for l in range(0, 12, 8):
156 value = 0
157 for z in range(8):
158 if l + z < 12:
159 if image.pixel(x, y + l + z) == Qt.qRgb(0, 0, 0):
160 value += 1 << z
161 else:
162 skip = False
163 if skip and l == 8:
164 value = 0xff
165 f.write("0x%02x," % value)
166 f.write("\n")
167 elif what == "10x14":
168 for y in range(0, height, 16):
169 for x in range(width):
170 for l in range(0, 16, 8):
171 value = 0
172 for z in range(8):
173 if image.pixel(x, y + l + z) == Qt.qRgb(0, 0, 0):
174 value += 1 << z
175 f.write("0x%02x," % value)
176 f.write("\n")
177 elif what == "22x38":
178 for y in range(0, height, 40):
179 for x in range(width):
180 for l in range(0, 40, 8):
181 value = 0
182 for z in range(8):
183 if image.pixel(x, y + l + z) == Qt.qRgb(0, 0, 0):
184 value += 1 << z
185 f.write("0x%02x," % value)
186 f.write("\n")
187 else:
188 print("wrong argument", sys.argv[4])