class RGBDisplay – RGB-Display-Treiber

Die Klasse RGBDisplay steuert parallele 24-Bit-RGB-LCDs über den STM32-LTDC-Controller (LCD-TFT). Der LTDC streamt Pixel direkt aus einem SDRAM-gestützten Framebuffer mit dem gewählten Pixeltakt, sodass hohe Bildwiederholraten (bis zu 120 Hz) ohne Beteiligung der CPU möglich sind.

Auf der OpenMV Cam Pure Thermal speist derselbe parallele 24-Bit-Bus zudem einen integrierten TFP410-HDMI-Encoder, sodass auch deren HDMI-Ausgang über diese Klasse angesteuert wird – verwende display_on=False, um das integrierte LCD dunkelzuschalten, während weiterhin Pixel zum Encoder getaktet werden.

Die Panel-Auflösung wird über framesize mit den im Modul display definierten Konstanten ausgewählt (QVGA, VGA, WVGA, HD, FHD, …). Panel-spezifische Initialisierungssequenzen werden über das Schlüsselwortargument controller eingebunden (zum Beispiel ST7701 für ST7701-basierte Panels). Die Hintergrundbeleuchtungshelligkeit wird standardmäßig als einfacher GPIO angesteuert oder durch DACBacklight / PWMBacklight, falls eine davon als backlight übergeben wird.

Einzelbilder werden durch Aufruf von write() mit einem image.Image dargestellt. Der Treiber übernimmt die RGB-Konvertierung, Skalierung, ROI-, Paletten- und Orientierungstransformationen intern.

Beispiel – die Kamera auf ein 480x272-Panel mit 60 Hz spiegeln:

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)

Konstruktoren

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 Eine der standardmäßig unterstützten Auflösungen (siehe die Konstanten des Moduls display).

refresh Legt die Bildwiederholrate des Bildschirms in Hertz fest (30-120). Dies steuert den Pixeltakt des RGB-LCDs.

display_on Aktiviert den lokalen LCD-Ausgang. Übergib False auf der OpenMV Cam Pure Thermal, deren paralleler 24-Bit-Bus sowohl das integrierte LCD als auch den TFP410-HDMI-Encoder ansteuert – so bleibt das integrierte LCD dunkelgeschaltet, während der HDMI-Encoder weiterhin gespeist wird. Auf anderen OpenMV Cams gibt es keine gemeinsame Senke, und dies kann auf seinem Standardwert belassen werden.

triple_buffer Bei True werden Aktualisierungen des Bildschirms nicht blockierend, allerdings auf Kosten des dreifachen Display-Speichers im RAM.

portrait Vertauscht Breite und Höhe der framesize.

controller Übergib eine Instanz einer Controller-Chip-Klasse, um diesen zusammen mit dem Display zu initialisieren.

backlight Übergib eine Instanz eines Hintergrundbeleuchtungs-Controllermoduls, das verwendet werden soll. Standardmäßig wird die Hintergrundbeleuchtung über einen GPIO-Pin gesteuert.

deinit() None

Gibt die von der Klasse verwendeten I/O-Pins und den RAM frei. Dies wird bei der Zerstörung automatisch aufgerufen.

width() int

Gibt die Breite des Bildschirms zurück.

height() int

Gibt die Höhe des Bildschirms zurück.

triple_buffer() bool

Gibt zurück, ob Triple Buffering aktiviert ist.

bgr() bool

Gibt zurück, ob der rote und der blaue Kanal vertauscht sind.

byte_swap() bool

Gibt zurück, ob die RGB565-Pixelbytes bei der Ausgabe vertauscht werden.

framesize() int

Gibt die framesize-Konstante zurück, mit der das Display konfiguriert wurde.

refresh() int

Gibt die Bildwiederholrate zurück.

clear(display_off: bool = False) None

Setzt den LCD-Bildschirm auf Schwarz.

display_off Bei True wird die Display-Logik abgeschaltet, anstatt den Framebuffer auf Schwarz zu setzen. Du solltest danach auch die Hintergrundbeleuchtung ausschalten, damit der Bildschirm wirklich schwarz wird, da viele Displays weiß sind, wenn nur die Hintergrundbeleuchtung eingeschaltet ist.

backlight(value: int | None = None) int

Setzt den Dimmwert der LCD-Hintergrundbeleuchtung, von 0 (aus) bis 100 (an). Übergib keine Argumente, um den aktuellen Wert der Hintergrundbeleuchtung abzurufen.

Sofern dem Konstruktor kein DACBacklight- oder PWMBacklight-Controller übergeben wurde, wird die Hintergrundbeleuchtung als GPIO-Pin gesteuert und kann nur von 0 (aus) auf ungleich null (an) wechseln.

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

Zeigt ein image an, dessen linke obere Ecke an Position x, y beginnt. Anstelle eines Bildobjekts kann auch ein Pfad-String übergeben werden, um das Bild automatisch von der Festplatte zu laden.

x_scale steuert, wie stark das angezeigte Bild in x-Richtung skaliert wird. Ist dieser Wert negativ, wird das Bild horizontal gespiegelt. Wird y_scale nicht angegeben, entspricht es x_scale, um das Seitenverhältnis beizubehalten.

y_scale steuert, wie stark das angezeigte Bild in y-Richtung skaliert wird. Ist dieser Wert negativ, wird das Bild vertikal gespiegelt (erfordert Triple Buffering). Wird x_scale nicht angegeben, entspricht es y_scale, um das Seitenverhältnis beizubehalten.

roi ist das Rechteck-Tupel (x, y, w, h) des anzuzeigenden Interessensbereichs des Bildes.

rgb_channel ist der RGB-Kanal (0=R, 1=G, 2=B), der aus einem RGB565-Bild extrahiert und in Graustufen dargestellt werden soll. -1 deaktiviert die Kanalextraktion.

alpha steuert, wie undurchsichtig das Bild ist, von 0 (vollständig transparent / schwarz) bis 255 (undurchsichtig).

color_palette ein RGB565-Bild mit insgesamt 256 Pixeln, das als Farbnachschlagetabelle auf den Graustufenwert des Eingabebildes angewendet wird. Wird nach der rgb_channel-Extraktion angewendet. Kann auch ein Paletten-Enum sein (z. B. image.PALETTE_RAINBOW).

alpha_palette ein GRAYSCALE-Bild mit insgesamt 256 Pixeln, das als Alpha-Nachschlagetabelle pro Pixel auf den Graustufenwert des Eingabebildes angewendet wird. Wird nach der rgb_channel-Extraktion angewendet.

hint ist eine logische ODER-Verknüpfung der Flags: