Bonjour,
L'inscription sur ce forum et les premiers messages sont modérés par un Administrateur.
Ce n'est pas très convivial mais malheureusement nécessaire suite au spam intensif de nos amis russes.
Cordialement,
Dominique

Afficher une image/logo sur écran OLED

A la recherche d'un pilote pour supporter un périphérique matériel? Ou une bibliothèques spécialisée (ex: FFT).
Peut être développez-vous des pilotes MicroPython?
Cette section est le bon endroit pour en parler?
Forum rules
Vous aimez MicroPython? Nous aussi! Ces forums sont destinés aux amoureux de Python sur MicroContrôleur.
Le support se fait sur base volontaire et uniquement pour des produits officiels (pas de copie SVP).
Le forum de MicroPython.org sera une excellente référence documentaire (en anglais).

Merci de suivre les recommandations suivantes.
Pensez à:
  • Titre claire: permettant d'identifier le produit et le problème
  • Contenu complet: schéma, message d'erreur, etc (tout ce qui permet d'aider à distance).
  • Fichier joint: Max 300 Ko
  • Courtoisie et précision
Post Reply
User avatar
Dominique
Administrateur du site
Posts: 307
Joined: Sun 17 May 2020 22:43

Afficher une image/logo sur écran OLED

Post by Dominique »

L'idéal est d'utiliser un format peu gourmand et sous forme de fichier binaire.
PBM :Portable BitMap est idéal et supporté par Gimp. Il suffit de charger une image, changer la taille et exporter en pbm. Gimp fait un dégradé de gris puis applique un algorithme de distribution des points pour simuler les dégradés. Top!

J'ai une bibliothèque PBM pour MicroPython ici qui réduit au maximum l'utilisation de la RAM. Basé uniquement sur du file reading et une mémoire tampon.

La bibliothèque imglib/bpm.py et la fonction img.py - open_image() permettent d'ouvrir facilement l'image et d'en copier le contenu vers un FrameBuffer (celui de l'écran OLED)... ou tout ce qui expose une interface compatible FrameBuffer.
Il est même possible d'inspecter une partie de l'image dans la console en mode texte (c'est pas mal pour faire du debug).

Code: Select all

from machine import SPI, Pin
from lcd12864 import SPI_LCD12864
from img import open_image
import time

# PYBStick: S19=mosi, S23=sck, S26=/ss
cs = Pin( 'S26', Pin.OUT, value=0 )
spi = SPI( 1 )
spi.init( polarity=0, phase=1 )

lcd = SPI_LCD12864( spi=spi, cs=cs )


def color_transform( rgb ):
	# Transformer la couleur du clipreader (rgb) vers la couleur du FrameBuffer de
	# destination (l'afficheur LCD -> 2 coleurs)
	return 0 if rgb==(0,0,0) else 1

reader = open_image( 'mpy.pbm' )
# Selection la partie de l'image (à la taille du LCD)
reader.clip(0,0,lcd.width,lcd.height)
# Copier la section Clipée dans le FrameBuffer du LCD à partir de sa coordonnée
# 0,0 et pour la taille du clipping (largeur,hauteur)
reader.copy_to(lcd, 0,0, color_transform )
lcd.update()
Sélection_062.png
A noter la présence de reader.clip() qui permet de sélectionner une partie de l'image.
Il est donc possible d'avoir un fichier de ressource unique avec plusieurs images dedans.... ou de faire du scrolling sur une image en déplacant la zone de clipping.

La bibliothèque support également les images BMP 24 bits en RGB888... si cela peut intéresser.
Dominique, MC Hobby.
Post Reply