mirror of
https://github.com/opentx/opentx.git
synced 2025-07-20 06:45:10 +03:00
Instead of manually opening and closes file objects, use the context manager that will properly handle opening and closing files for us, even in the event of some error
154 lines
5.5 KiB
Python
Executable file
154 lines
5.5 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
from __future__ import division, print_function
|
|
|
|
import sys
|
|
from PyQt4 import Qt, QtGui
|
|
|
|
image = QtGui.QImage(sys.argv[1])
|
|
width, height = image.size().width(), image.size().height()
|
|
|
|
|
|
def writeSize(f, width, height):
|
|
if lcdwidth > 255:
|
|
f.write("%d,%d,%d,%d,\n" % (width % 256, width // 256, height % 256, height // 256))
|
|
else:
|
|
f.write("%d,%d,\n" % (width, height))
|
|
|
|
|
|
with open(sys.argv[2], "w") as f:
|
|
lcdwidth = int(sys.argv[3])
|
|
|
|
if len(sys.argv) > 4:
|
|
what = sys.argv[4]
|
|
else:
|
|
for s in ("03x05", "04x06", "05x07", "08x10", "10x14", "22x38"):
|
|
if s in sys.argv[2]:
|
|
what = s
|
|
break
|
|
|
|
if what == "1bit":
|
|
rows = 1
|
|
if len(sys.argv) > 5:
|
|
rows = int(sys.argv[5])
|
|
writeSize(f, width, height // rows)
|
|
for y in range(0, height, 8):
|
|
for x in range(width):
|
|
value = 0
|
|
for z in range(8):
|
|
if y + z < height and image.pixel(x, y + z) == Qt.qRgb(0, 0, 0):
|
|
value += 1 << z
|
|
f.write("0x%02x," % value)
|
|
f.write("\n")
|
|
elif what == "4/4/4/4":
|
|
colors = []
|
|
f.write("%d,%d,\n" % (width, height))
|
|
for y in range(height):
|
|
for x in range(width):
|
|
pixel = image.pixel(x, y)
|
|
f.write("0x%1x%1x%1x%1x," % (Qt.qAlpha(pixel) // 16, Qt.qRed(pixel) // 16, Qt.qGreen(pixel) // 16, Qt.qBlue(pixel) // 16))
|
|
f.write("\n")
|
|
elif what == "5/6/5/8":
|
|
colors = []
|
|
writeSize(f, width, height)
|
|
for y in range(height):
|
|
for x in range(width):
|
|
pixel = image.pixel(x, y)
|
|
val = ((Qt.qRed(pixel) >> 3) << 11) + ((Qt.qGreen(pixel) >> 2) << 5) + ((Qt.qBlue(pixel) >> 3) << 0)
|
|
# f.write("%d,%d,%d," % (val%256, val/256, Qt.qAlpha(pixel) >> 4))
|
|
f.write("%d,%d," % (val % 256, val // 256))
|
|
f.write("\n")
|
|
elif what == "4bits":
|
|
colors = []
|
|
writeSize(f, width, height)
|
|
for y in range(0, height, 2):
|
|
for x in range(width):
|
|
value = 0xFF
|
|
gray1 = Qt.qGray(image.pixel(x, y))
|
|
if y + 1 < height:
|
|
gray2 = Qt.qGray(image.pixel(x, y + 1))
|
|
else:
|
|
gray2 = Qt.qRgb(255, 255, 255)
|
|
for i in range(4):
|
|
if (gray1 & (1 << (4 + i))):
|
|
value -= 1 << i
|
|
if (gray2 & (1 << (4 + i))):
|
|
value -= 1 << (4 + i)
|
|
f.write("0x%02x," % value)
|
|
f.write("\n")
|
|
elif what == "8bits":
|
|
colors = []
|
|
writeSize(f, width, height)
|
|
for y in range(height):
|
|
for x in range(width):
|
|
value = Qt.qGray(image.pixel(x, y))
|
|
value = 0x0f - (value >> 4)
|
|
f.write("0x%02x," % value)
|
|
f.write("\n")
|
|
elif what == "03x05":
|
|
for y in range(0, height, 5):
|
|
for x in range(width):
|
|
value = 0
|
|
for z in range(5):
|
|
if image.pixel(x, y + z) == Qt.qRgb(0, 0, 0):
|
|
value += 1 << z
|
|
f.write("0x%02x," % value)
|
|
f.write("\n")
|
|
elif what == "04x06":
|
|
for y in range(0, height, 7):
|
|
for x in range(width):
|
|
value = 0
|
|
for z in range(7):
|
|
if image.pixel(x, y + z) == Qt.qRgb(0, 0, 0):
|
|
value += 1 << z
|
|
if value == 0x7f:
|
|
value = 0xff
|
|
f.write("0x%02x," % value)
|
|
f.write("\n")
|
|
elif what == "05x07":
|
|
for y in range(0, height, 8):
|
|
for x in range(width):
|
|
value = 0
|
|
for z in range(8):
|
|
if image.pixel(x, y + z) == Qt.qRgb(0, 0, 0):
|
|
value += 1 << z
|
|
f.write("0x%02x," % value)
|
|
f.write("\n")
|
|
elif what == "08x10":
|
|
for y in range(0, height, 12):
|
|
for x in range(width):
|
|
skip = True
|
|
for l in range(0, 12, 8):
|
|
value = 0
|
|
for z in range(8):
|
|
if l + z < 12:
|
|
if image.pixel(x, y + l + z) == Qt.qRgb(0, 0, 0):
|
|
value += 1 << z
|
|
else:
|
|
skip = False
|
|
if skip and l == 8:
|
|
value = 0xff
|
|
f.write("0x%02x," % value)
|
|
f.write("\n")
|
|
elif what == "10x14":
|
|
for y in range(0, height, 16):
|
|
for x in range(width):
|
|
for l in range(0, 16, 8):
|
|
value = 0
|
|
for z in range(8):
|
|
if image.pixel(x, y + l + z) == Qt.qRgb(0, 0, 0):
|
|
value += 1 << z
|
|
f.write("0x%02x," % value)
|
|
f.write("\n")
|
|
elif what == "22x38":
|
|
for y in range(0, height, 40):
|
|
for x in range(width):
|
|
for l in range(0, 40, 8):
|
|
value = 0
|
|
for z in range(8):
|
|
if image.pixel(x, y + l + z) == Qt.qRgb(0, 0, 0):
|
|
value += 1 << z
|
|
f.write("0x%02x," % value)
|
|
f.write("\n")
|
|
else:
|
|
print("wrong argument", sys.argv[4])
|