class TVDisplay – TV-Shield-Treiber

Die Klasse TVDisplay steuert das OpenMV TV Shield an, das einen RGB565-Framebuffer in ein NTSC-Composite-Videosignal (352x240, 60 Halbbilder/s, interlaced) umwandelt, das für jeden Fernseher oder analogen Videomonitor geeignet ist.

Zwei Shield-Varianten werden unterstützt:

  • Das verkabelte TV Shield, das das Composite-Signal über eine einzelne Cinch-Buchse bereitstellt.

  • Das Wireless TV Shield, das dasselbe Signal in einen analogen 2,4-GHz-Videosender einspeist. Der Empfängerkanal (1–8) wird zur Laufzeit über ioctl() mit display.IOCTL_CHANNEL ausgewählt; bis dieser Aufruf erfolgt ist, ist kein Kanal ausgewählt.

Auflösung und Framing sind fest – TVDisplay nimmt kein framesize-Argument entgegen. Einzelbilder werden präsentiert, indem ein image.Image an write() übergeben wird, das Skalierung, ROI, Palette und Ausrichtungstransformationen intern verarbeitet.

Anwendungsbeispiel:

import csi
import display

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.SIF)              # 352x240, matches the TV output

tv = display.TVDisplay()

while True:
    tv.write(csi0.snapshot())

Konstruktoren

class display.TVDisplay(triple_buffer: bool = True)

triple_buffer Wenn True, werden Aktualisierungen des Bildschirms nicht-blockierend, auf Kosten des 3-fachen der Displaygröße im RAM. Der Standardwert ist boardabhängig.

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

height() int

Gibt die Höhe des Bildschirms zurück (240).

refresh() int

Gibt die Aktualisierungsrate zurück (60).

triple_buffer() bool

Gibt zurück, ob Triple-Buffering aktiviert ist.

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 = 256, color_palette: int | 'image.Image' | None = None, alpha_palette: 'image.Image' | None = None, hint: int = 0) None

Zeigt ein image an, dessen obere linke Ecke an der Position x, y beginnt.

x_scale steuert, wie stark das angezeigte Bild in x-Richtung skaliert wird (Float). Ist dieser Wert negativ, wird das Bild horizontal gespiegelt.

y_scale steuert, wie stark das angezeigte Bild in y-Richtung skaliert wird (Float). Ist dieser Wert negativ, wird das Bild vertikal gespiegelt.

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

rgb_channel ist der RGB-Kanal (0=R, G=1, B=2), der aus einem RGB565-Bild extrahiert und auf dem Display dargestellt wird.

alpha steuert, wie undurchsichtig das Bild ist. Ein Wert von 256 zeigt ein undurchsichtiges Bild an, während ein Wert unter 256 ein schwarzes, transparentes Bild erzeugt. 0 ergibt ein vollständig schwarzes Bild.

color_palette kann, wenn nicht -1, ein Farbpaletten-Enum oder ein RGB565-Bild mit insgesamt 256 Pixeln sein, das als Farb-Lookup-Tabelle auf den Graustufenwert des Eingabebilds verwendet wird.

alpha_palette kann, wenn nicht -1, ein GRAYSCALE-Bild mit insgesamt 256 Pixeln sein, das als Alpha-Palette verwendet wird und den alpha-Wert des Eingabebilds auf Pixelebene moduliert.

hint logische ODER-Verknüpfung der Flags:

clear(display_off: bool = False) None

Löscht den Bildschirm auf Schwarz.

display_off wird aus Gründen der API-Kompatibilität mit anderen Displayklassen akzeptiert und ignoriert.

ioctl(cmd: int, *args) object

Generischer ioctl-Einstiegspunkt.

Übergeben Sie display.IOCTL_CHANNEL als cmd, um den Sendekanal des Wireless TV Shields festzulegen oder abzurufen. Mit einem zweiten Argument (1-8) wird der Kanal festgelegt; ohne zweites Argument wird der aktuelle Kanal zurückgegeben. Bis zum ersten Set-Aufruf ist kein Kanal ausgewählt.