class RGBDisplay – Pilote d’écran RGB

La classe RGBDisplay pilote des écrans LCD RGB parallèles 24 bits via le contrôleur STM32 LTDC (LCD-TFT). Le LTDC envoie les pixels directement depuis un tampon d’image en SDRAM à l’horloge pixel choisie, ce qui permet des fréquences de rafraîchissement élevées (jusqu’à 120 Hz) sans intervention du CPU.

Sur l’OpenMV Cam Pure Thermal, ce même bus parallèle 24 bits alimente aussi un encodeur HDMI TFP410 embarqué, de sorte que sa sortie HDMI est également pilotée par cette classe – utilisez display_on=False pour éteindre l’écran LCD embarqué tout en continuant d’envoyer les pixels à l’encodeur.

La résolution du panneau se sélectionne via framesize à l’aide des constantes définies dans le module display (QVGA, VGA, WVGA, HD, FHD, …). Les séquences d’initialisation propres à chaque panneau sont fournies via l’argument nommé controller (par exemple ST7701 pour les panneaux basés sur le ST7701). La luminosité du rétroéclairage est pilotée par défaut comme un simple GPIO, ou par DACBacklight / PWMBacklight si l’un d’eux est passé via backlight.

Les trames sont affichées en appelant write() avec une image.Image. Le pilote gère en interne la conversion RGB, la mise à l’échelle, le ROI, la palette et les transformations d’orientation.

Exemple – recopier la caméra sur un panneau 480x272 à 60 Hz:

import csi
import display
import image

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)

lcd = display.RGBDisplay(framesize=display.FHVGA, refresh=60)

while True:
    lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)

Constructeurs

class display.RGBDisplay(framesize: int = display.FWVGA, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, controller: object | None = None, backlight: object | None = None)

framesize Une des résolutions standard prises en charge (voir les constantes du module display).

refresh Définit la fréquence de rafraîchissement de l’écran en hertz (30-120). Cela contrôle l’horloge pixel de l’écran LCD RGB.

display_on Active la sortie LCD locale. Passez False sur l’OpenMV Cam Pure Thermal, dont le bus parallèle 24 bits pilote à la fois l’écran LCD embarqué et l’encodeur HDMI TFP410 – cela maintient l’écran LCD embarqué éteint tout en continuant d’alimenter l’encodeur HDMI. Sur les autres OpenMV Cams, il n’y a pas de destination partagée et cela peut être laissé à sa valeur par défaut.

triple_buffer Si True, rend les mises à jour de l’écran non bloquantes au prix de 3x la taille de l’affichage en RAM.

portrait Échange la largeur et la hauteur du framesize.

controller Passez une instance de classe de puce contrôleur pour l’initialiser en même temps que l’affichage.

backlight Passez une instance de module de contrôleur de rétroéclairage à utiliser. Par défaut, le rétroéclairage est contrôlé via une broche GPIO.

deinit() None

Libère les broches d’E/S et la RAM utilisées par la classe. Cette méthode est appelée automatiquement lors de la destruction.

width() int

Renvoie la largeur de l’écran.

height() int

Renvoie la hauteur de l’écran.

triple_buffer() bool

Indique si le triple tampon est activé.

bgr() bool

Indique si les canaux rouge et bleu sont échangés.

byte_swap() bool

Indique si les octets des pixels RGB565 sont échangés en sortie.

framesize() int

Renvoie la constante framesize avec laquelle l’affichage a été configuré.

refresh() int

Renvoie la fréquence de rafraîchissement.

clear(display_off: bool = False) None

Efface l’écran LCD en noir.

display_off si True, éteint la logique d’affichage au lieu d’effacer le tampon d’image en noir. Vous devez également éteindre le rétroéclairage ensuite pour vous assurer que l’écran devient noir, car de nombreux écrans sont blancs lorsque seul le rétroéclairage est allumé.

backlight(value: int | None = None) int

Définit la valeur de variation du rétroéclairage de l’écran LCD, de 0 (éteint) à 100 (allumé). N’indiquez aucun argument pour obtenir la valeur actuelle du rétroéclairage.

À moins qu’un contrôleur DACBacklight ou PWMBacklight n’ait été passé au constructeur, le rétroéclairage est contrôlé comme une broche GPIO et ne passera que de 0 (éteint) à une valeur non nulle (allumé).

write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None

Affiche une image dont le coin supérieur gauche commence à l’emplacement x, y. Une chaîne de chemin peut également être passée à la place d’un objet image pour charger automatiquement l’image depuis le disque.

x_scale contrôle l’ampleur de la mise à l’échelle de l’image affichée dans la direction x. Si cette valeur est négative, l’image sera retournée horizontalement. Si y_scale n’est pas spécifié, il prendra la même valeur que x_scale afin de conserver le rapport d’aspect.

y_scale contrôle l’ampleur de la mise à l’échelle de l’image affichée dans la direction y. Si cette valeur est négative, l’image sera retournée verticalement (nécessite le triple tampon). Si x_scale n’est pas spécifié, il prendra la même valeur que y_scale afin de conserver le rapport d’aspect.

roi est le tuple rectangulaire de la région d’intérêt (x, y, w, h) de l’image à afficher.

rgb_channel est le canal RGB (0=R, 1=G, 2=B) à extraire d’une image RGB565 et à rendre en niveaux de gris. -1 désactive l’extraction de canal.

alpha contrôle l’opacité de l’image, de 0 (entièrement transparente / noire) à 255 (opaque).

color_palette une image RGB565 de 256 pixels au total utilisée comme table de correspondance de couleurs sur la valeur en niveaux de gris de l’image d’entrée. Appliquée après l’extraction de rgb_channel. Peut aussi être une énumération de palette (p. ex. image.PALETTE_RAINBOW).

alpha_palette une image GRAYSCALE de 256 pixels au total utilisée comme table de correspondance alpha par pixel sur la valeur en niveaux de gris de l’image d’entrée. Appliquée après l’extraction de rgb_channel.

hint est un OU logique des indicateurs :