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()

Exibições: 195

Responder esta

Respostas a este tópico

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!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço