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)¶
framesizeJedna od standardnih podržanih razlučivosti (vidi konstante moduladisplay).refreshPostavlja frekvenciju osvježavanja zaslona u hercima (30-120). Time se upravlja takt piksela RGB LCD-a.display_onOmogućuje lokalni LCD izlaz. ProslijediteFalsena 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_bufferAko jeTrue, ažuriranja zaslona postaju neblokirajuća uz cijenu 3x veće veličine zaslona u RAM-u.portraitZamjenjuje širinu i visinu framesize-a.controllerProslijedite instancu klase upravljačkog čipa kako bi se inicijalizirala zajedno sa zaslonom.backlightProslijedite 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.
- clear(display_off: bool = False) None¶
Briše LCD zaslon u crno.
display_offako jeTrue, 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č
DACBacklightiliPWMBacklight, 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 lokacijix,y. Umjesto objekta slike može se proslijediti i niz s putanjom za automatsko učitavanje slike s diska.x_scaleupravlja koliko se prikazana slika skalira u smjeru x. Ako je ta vrijednost negativna, slika će se zrcaliti vodoravno. Akoy_scalenije naveden, poprimit će vrijednostx_scaleradi održavanja omjera slike.y_scaleupravlja koliko se prikazana slika skalira u smjeru y. Ako je ta vrijednost negativna, slika će se okrenuti okomito (zahtijeva trostruko međuspremanje). Akox_scalenije naveden, poprimit će vrijednosty_scaleradi održavanja omjera slike.roije n-torka pravokutnika područja interesa(x, y, w, h)slike koja se prikazuje.rgb_channelje RGB kanal (0=R, 1=G, 2=B) koji se izdvaja iz RGB565 slike i prikazuje u sivim tonovima.-1onemogućuje izdvajanje kanala.alphaupravlja koliko je slika neprozirna, od 0 (potpuno prozirna / crna) do 255 (neprozirna).color_paletteRGB565 slika od ukupno 256 piksela koja se koristi kao tablica za pretraživanje boja na vrijednosti sivih tonova ulazne slike. Primjenjuje se nakon izdvajanjargb_channel. Može biti i enum palete (npr.image.PALETTE_RAINBOW).alpha_paletteslika 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 izdvajanjargb_channel.hintje logički OR zastavica:image.AREA: Koristi skaliranje po površini pri smanjivanju umjesto najbližeg susjeda.image.BILINEAR: Koristi bilinearno skaliranje umjesto najbližeg susjeda.image.BICUBIC: Koristi bikubično skaliranje umjesto najbližeg susjeda.image.CENTER: Centrira sliku na zaslonu (primjenjuje se nakon skaliranja).image.HMIRROR: Vodoravno zrcali sliku.image.VFLIP: Okomito okreće sliku.image.TRANSPOSE: Transponira sliku (zamjenjuje x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Izvodi izdvajanjergb_channelprije skaliranja.image.APPLY_COLOR_PALETTE_FIRST: Primjenjujecolor_paletteprije skaliranja.image.SCALE_ASPECT_KEEP: Skalira sliku tako da stane unutar zaslona.image.SCALE_ASPECT_EXPAND: Skalira sliku tako da ispuni zaslon (s obrezivanjem).image.SCALE_ASPECT_IGNORE: Skalira sliku tako da ispuni zaslon (s rastezanjem).image.ROTATE_90: Zakreće za 90 stupnjeva (VFLIP | TRANSPOSE).image.ROTATE_180: Zakreće za 180 stupnjeva (HMIRROR | VFLIP).image.ROTATE_270: Zakreće za 270 stupnjeva (HMIRROR | TRANSPOSE).