class RGBDisplay – upravljački program za RGB zaslon

Klasa RGBDisplay upravlja 24-bitnim paralelnim RGB LCD zaslonima putem STM32 LTDC (LCD-TFT) kontrolera. LTDC prenosi piksele izravno iz međuspremnika slike smještenog u SDRAM-u uz odabrani takt piksela, pa su moguće visoke frekvencije osvježavanja (do 120 Hz) bez sudjelovanja CPU-a.

Na uređaju OpenMV Cam Pure Thermal ista 24-bitna paralelna sabirnica također napaja ugrađeni TFP410 HDMI koder, pa se njegov HDMI izlaz upravlja kroz ovu klasu – koristite display_on=False za zatamnjivanje ugrađenog LCD-a uz istovremeno taktiranje piksela prema koderu.

Razlučivost ploče odabire se putem framesize koristeći konstante definirane u modulu display (QVGA, VGA, WVGA, HD, FHD, …). Inicijalizacijski nizovi specifični za ploču umeću se putem argumenta controller (na primjer ST7701 za ploče temeljene na ST7701). Svjetlina pozadinskog osvjetljenja prema zadanim postavkama upravlja se kao jednostavni GPIO, ili putem DACBacklight / PWMBacklight ako se proslijedi kao backlight.

Sličice se prikazuju pozivom write() s objektom image.Image. Upravljački program interno obavlja RGB konverziju, skaliranje, ROI te transformacije palete i orijentacije.

Primjer – zrcaljenje kamere na ploču 480x272 pri 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)

Konstruktori

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 Jedna od standardnih podržanih razlučivosti (vidi konstante modula display).

refresh Postavlja frekvenciju osvježavanja zaslona u hercima (30-120). Time se upravlja takt piksela RGB LCD-a.

display_on Omogućuje lokalni LCD izlaz. Proslijedite False na uređaju OpenMV Cam Pure Thermal, čija 24-bitna paralelna sabirnica napaja i ugrađeni LCD i TFP410 HDMI koder – time se ugrađeni LCD drži zatamnjenim uz istovremeno napajanje HDMI kodera. Na ostalim OpenMV Cam uređajima nema dijeljenog odredišta pa se ovo može ostaviti na zadanoj vrijednosti.

triple_buffer Ako je True, ažuriranja zaslona postaju neblokirajuća uz cijenu 3x veće veličine zaslona u RAM-u.

portrait Zamjenjuje širinu i visinu framesize-a.

controller Proslijedite instancu klase upravljačkog čipa kako bi se inicijalizirala zajedno sa zaslonom.

backlight Proslijedite instancu modula upravljača pozadinskog osvjetljenja koja će se koristiti. Prema zadanim postavkama pozadinskim osvjetljenjem upravlja se putem GPIO pina.

deinit() None

Oslobađa I/O pinove i RAM koje klasa koristi. Ovo se automatski poziva pri uništenju.

width() int

Vraća širinu zaslona.

height() int

Vraća visinu zaslona.

triple_buffer() bool

Vraća je li omogućeno trostruko međuspremanje.

bgr() bool

Vraća jesu li crveni i plavi kanali zamijenjeni.

byte_swap() bool

Vraća jesu li bajtovi RGB565 piksela zamijenjeni na izlazu.

framesize() int

Vraća konstantu framesize s kojom je zaslon konfiguriran.

refresh() int

Vraća frekvenciju osvježavanja.

clear(display_off: bool = False) None

Briše LCD zaslon u crno.

display_off ako je True, isključuje logiku zaslona umjesto brisanja međuspremnika slike u crno. Nakon toga biste trebali isključiti i pozadinsko osvjetljenje kako biste osigurali da zaslon postane crn, jer su mnogi zasloni bijeli kada je upaljeno samo pozadinsko osvjetljenje.

backlight(value: int | None = None) int

Postavlja vrijednost zatamnjenja LCD pozadinskog osvjetljenja, od 0 (isključeno) do 100 (uključeno). Pozovite bez argumenata za dohvaćanje trenutne vrijednosti pozadinskog osvjetljenja.

Osim ako je konstruktoru proslijeđen upravljač DACBacklight ili PWMBacklight, pozadinskim osvjetljenjem upravlja se kao GPIO pinom i ono će ići samo od 0 (isključeno) do različito od nule (uključeno).

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

Prikazuje image čiji gornji lijevi kut počinje na lokaciji x, y. Umjesto objekta slike može se proslijediti i niz s putanjom za automatsko učitavanje slike s diska.

x_scale upravlja koliko se prikazana slika skalira u smjeru x. Ako je ta vrijednost negativna, slika će se zrcaliti vodoravno. Ako y_scale nije naveden, poprimit će vrijednost x_scale radi održavanja omjera slike.

y_scale upravlja koliko se prikazana slika skalira u smjeru y. Ako je ta vrijednost negativna, slika će se okrenuti okomito (zahtijeva trostruko međuspremanje). Ako x_scale nije naveden, poprimit će vrijednost y_scale radi održavanja omjera slike.

roi je n-torka pravokutnika područja interesa (x, y, w, h) slike koja se prikazuje.

rgb_channel je RGB kanal (0=R, 1=G, 2=B) koji se izdvaja iz RGB565 slike i prikazuje u sivim tonovima. -1 onemogućuje izdvajanje kanala.

alpha upravlja koliko je slika neprozirna, od 0 (potpuno prozirna / crna) do 255 (neprozirna).

color_palette RGB565 slika od ukupno 256 piksela koja se koristi kao tablica za pretraživanje boja na vrijednosti sivih tonova ulazne slike. Primjenjuje se nakon izdvajanja rgb_channel. Može biti i enum palete (npr. image.PALETTE_RAINBOW).

alpha_palette slika u sivim tonovima od ukupno 256 piksela koja se koristi kao tablica za pretraživanje alfa vrijednosti po pikselu na vrijednosti sivih tonova ulazne slike. Primjenjuje se nakon izdvajanja rgb_channel.

hint je logički OR zastavica: