-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathimg2c.py
84 lines (65 loc) · 2.48 KB
/
img2c.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import sys
try:
import cv2 as cv
except ImportError:
print("Falha ao encontrar biblioteca opencv")
print("Baixe em https://pypi.org/project/opencv-python/")
print("Saindo...")
sys.exit()
def convert_rgb565(pixel):
b, g, r = pixel[0:3]
rgb = ((r & 0b11111000) << 8) | ((g & 0b11111100) << 3) | (b >> 3)
return hex(rgb)
def create_matrix(img, progmem, start_idx):
altura, largura, _ = img.shape
colors = set()
matrix_str = ""
if progmem:
matrix_str += "const PROGMEM unsigned int sprite[] = {\n"
else:
matrix_str += "const unsigned int sprite[] = {\n"
for i in range(altura):
matrix_str += " "
for j in range(largura):
current_color = convert_rgb565(img[i,j])
colors.add(current_color)
matrix_str += f"{current_color}, "
matrix_str += "\n"
matrix_str += "};\n"
colors_str = ""
for idx, color in enumerate(list(colors)):
cur_idx = idx+start_idx
color_n = f"C{cur_idx}"
if progmem:
colors_str += f"const PROGMEM unsigned int {color_n} = {color};\n"
else:
colors_str += f"const unsigned int {color_n} = {color};\n"
matrix_str = matrix_str.replace(color, color_n)
colors_str += "\n"
dimensions_str = f"// LARGURA = {largura}\n"
dimensions_str += f"// ALTURA = {altura}\n"
return colors_str + dimensions_str + matrix_str
def write_file(file_name, info):
with open(file_name, "w") as f:
f.write(info)
def warn_bytes(img, progmem):
altura, largura, _ = img.shape
byte_count = altura * largura
print(f"Quantidade de Bytes utilizados: {byte_count}")
if byte_count > 2048 and not progmem:
print("CUIDADO! IMAGEM PASSA DE 2KB!")
print("Tome isto como uma guia, pois a quantidade exata de bytes usado pode variar dependendo das otimizacoes do compilador")
def main():
img = cv.imread('input.bmp')
if img is None:
print("Nao foi encontrado um arquivo input.bmp na mesma pasta")
print("Saindo...")
sys.exit()
print("Imagem encontrada")
progmem = int(input("Variaveis FLASH ou PROGMEM? (0 - FLASH, 1 - PROGMEM): "))
start_idx = int(input("Qual numero de cor quer comecar? (Se ja usou o script, coloque um a mais do que o valor mais alto de C no seu arquivo, se nao, 0): "))
info = create_matrix(img, progmem, start_idx)
warn_bytes(img, progmem)
write_file('output.txt', info)
if __name__ == '__main__':
main()