Gostaria de refazer essa biblioteca, fazendo com que ela abra imagens em bmp de forma instantânea, sem o processo da imagem aparecer gradativamente. Já mexi no for e não sei mais o que fazer. Não achei outras bibliotecas com o que eu queria. Esse é um projeto em micropython, para Raspberry pi pico.
O Código:
def bmp(fname, display, x, y, color=0):
f=open(fname,'rb')
b=bytearray(54)
b=f.read(54)
# header check
if b[0]==0x42 and b[1]==0x4D:
# is bitmap
size = b[2] + (b[3]8) + (b[4]16) +(b[5]24)
offset = b[10] + (b[11]8) + (b[12]16) +(b[13]24)
width = b[18] + (b[19]8) + (b[20]16) +(b[21]24)
height = b[22] + (b[23]8) + (b[24]16) +(b[25]24)
color_planes = b[26] + (b[27]8)
bits_per_pixel = b[28] + (b[29]8)
compression = b[30] + (b[31]8) + (b[32]16) +(b[33]24)
image_size = b[34] + (b[35]8) + (b[36]16) +(b[37]24)
f.seek(offset)
row_bytes = int(bits_per_pixel/8) * width
# Add up to multiple of 4
if row_bytes % 4 > 0:
row_bytes += 4 - row_bytes % 4
buffer = bytearray(row_bytes)
for row in range(height):
# print(row)
# read in a whole row
buffer=f.read(row_bytes)
d_buffer = bytearray(width*2)
index = 0
for index in range(width):
y1 = (height-1) - row + y
if color:
b = buffer[index*3]
g = buffer[index*3+2]
r = buffer[index*3+2]
c = display.rgb_to_565(r,g,b)
d_buffer[index*2] = c >> 8
d_buffer[index*2+1] = c & 0xff
else:
if buffer[index*3]!=0xff:
display.pixel(x,y,1)
if color:
display.draw_bmp(x,y1,width,1,d_buffer);
f.close()
Tags:
Olá Antonio Gabriel Garcez Barbosa, tudo bem?
Veja.
Não sei que tela você ta usando, pois você não disse. Não sei como ta o seu circuito. Não sei que biblioteca é essa, pois você também não disse. Não sei qual IDE você está usando. A única coisa que sei, é que você ta usando o Raspberry Pi Pico.
No universo da eletrônica, se você não fornecer boas informações, beira o impossível ajudar.
Olá.
Não conheço essa linguagem, mas ela me parece interpretada (assim como pyton), temo que o que esteja acontecendo é que o processamento da imagem pixel a pixel demora mesmo.
Essas linhas estão lendo o cabeçalho:
https://en.wikipedia.org/wiki/BMP_file_format
E depois o conteúdo do arquivo e convertendo pixel a pixel para o sistema de cor do display.
Acredito que existam 2 caminhos:
- Um formato de arquivo mais compatível com o display (que não exija conversão pixel a pixel)
- Uma linguagem mais eficiente (rápida), compilada, como C++ ou C#, o que estiver disponível para seu hardware.
Cara, faz muito sentido, visto que todas as bibliotecas referentes a esse processo funcionam dessa forma gradativa, até as simples. Vou testar a versão C/C++ do pi pico. Obrigado pela contribuição!!
Poxa, realmente fui mal nesse. O display utilizado é o ST7735, com conexão SPI, 6 pinos. Aquela biblioteca é uma disponível no github para o processamento de imagens em .BMP para micropython. Isso dito, não consigo fazer as imagens aparecerem de forma instantânea no display, elas aparecem gradativamente, porém, para o que eu preciso, elas teriam que aparecer o mais rápido possível. Acho que é isso. Desculpe o transtorno e obrigado pela atenção!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por