93 lines
2.7 KiB
Python
Executable File
93 lines
2.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import os, sys, io, shutil
|
|
from PIL import Image
|
|
|
|
DISPLAY_RESOLUTION = (400, 300)
|
|
|
|
COLOR_WHITE = 0
|
|
COLOR_RED = 1
|
|
COLOR_BLACK = 2
|
|
|
|
for infile in sys.argv[1:]:
|
|
filename, ext = os.path.splitext(infile)
|
|
filename = os.path.basename(filename)
|
|
|
|
black_array = []
|
|
red_array = []
|
|
|
|
with Image.open(infile) as im:
|
|
if (im.size != DISPLAY_RESOLUTION):
|
|
print("Image resolution does not match display resolution")
|
|
exit(2)
|
|
px = im.load()
|
|
blackImg = Image.new('L', im.size)
|
|
redImg = Image.new('L', im.size)
|
|
i = 7
|
|
blackByte = 0
|
|
redByte = 0
|
|
for y in range(0, im.size[1]):
|
|
for x in range(0, im.size[0]):
|
|
|
|
if px[x, y] == COLOR_BLACK:
|
|
blackByte |= 1 << i
|
|
redByte |= 1 << i
|
|
elif px[x, y] == COLOR_RED:
|
|
blackByte |= 0
|
|
redByte |= 0
|
|
else:
|
|
blackByte |= 0
|
|
redByte |= 1 << i
|
|
|
|
if i == 0:
|
|
black_array.append(blackByte)
|
|
red_array.append(redByte)
|
|
blackByte = 0
|
|
redByte = 0
|
|
i = 7
|
|
else:
|
|
i -= 1
|
|
|
|
# Write pixels
|
|
if px[x, y] == COLOR_BLACK:
|
|
blackImg.putpixel((x, y), 255)
|
|
redImg.putpixel((x, y), 255)
|
|
elif px[x, y] == COLOR_RED:
|
|
blackImg.putpixel((x, y), 0)
|
|
redImg.putpixel((x, y), 0)
|
|
else:
|
|
blackImg.putpixel((x, y), 0)
|
|
redImg.putpixel((x, y), 255)
|
|
|
|
# Construct black image
|
|
black_string = "const unsigned char gImage_4in2bc_b[] = {"
|
|
|
|
for px in black_array:
|
|
black_string += "0x{:02x},".format(px)
|
|
|
|
black_string = black_string.rstrip(',') + "};\n"
|
|
|
|
# Construct red image
|
|
red_string = "const unsigned char gImage_4in2bc_ry[] = {"
|
|
|
|
for px in red_array:
|
|
red_string += "0x{:02x},".format(px)
|
|
|
|
red_string = red_string.rstrip(',') + "};"
|
|
|
|
# Cleanup
|
|
if not os.path.exists('output'):
|
|
os.mkdir('output')
|
|
if (os.path.exists('output/' + filename)):
|
|
shutil.rmtree('output/' + filename)
|
|
os.mkdir('output/' + filename)
|
|
shutil.copy(infile, 'output/' + filename + '/original' + ext)
|
|
|
|
|
|
# Write images
|
|
blackImg.save('output/' + filename + '/' + 'black.bmp')
|
|
redImg.save('output/' + filename + '/' + 'red.bmp')
|
|
|
|
# Write file
|
|
f = open('output/' + filename + '/' + 'output.c', 'w')
|
|
f.write("#include \"ImageData.h\"\n\n" + black_string + red_string)
|
|
f.close() |