class RGBDisplay – RGB-displaystuurprogramma¶
De RGBDisplay-klasse stuurt 24-bit parallelle RGB-LCD’s aan via de STM32 LTDC (LCD-TFT)-controller. De LTDC stuurt pixels rechtstreeks vanuit een door SDRAM ondersteunde framebuffer uit op de gekozen pixelklok, zodat hoge verversingssnelheden (tot 120 Hz) mogelijk zijn zonder tussenkomst van de CPU.
Op de OpenMV Cam Pure Thermal voedt diezelfde 24-bit parallelle bus ook een ingebouwde TFP410 HDMI-encoder, zodat de HDMI-uitvoer eveneens via deze klasse wordt aangestuurd – gebruik display_on=False om het ingebouwde LCD zwart te maken terwijl er toch pixels naar de encoder worden geklokt.
De paneelresolutie wordt geselecteerd via framesize met behulp van de constanten die zijn gedefinieerd in de display-module (QVGA, VGA, WVGA, HD, FHD, …). Paneelspecifieke initialisatiesequenties worden ingeplugd via het sleutelwoordargument controller (bijvoorbeeld ST7701 voor panelen op basis van ST7701). De helderheid van de achtergrondverlichting wordt standaard als een eenvoudige GPIO aangestuurd, of door DACBacklight / PWMBacklight als een daarvan als backlight wordt meegegeven.
Frames worden weergegeven door write() aan te roepen met een image.Image. Het stuurprogramma handelt RGB-conversie, schalen, ROI, palet en oriëntatietransformaties intern af.
Voorbeeld – de camera spiegelen naar een 480x272-paneel op 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)
Constructors¶
- 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)¶
framesizeEen van de standaard ondersteunde resoluties (zie de constanten van dedisplay-module).refreshStelt de schermverversingssnelheid in hertz in (30-120). Dit regelt de pixelklok van het RGB-LCD.display_onSchakelt de lokale LCD-uitvoer in. GeefFalsemee op de OpenMV Cam Pure Thermal, waarvan de 24-bit parallelle bus zowel het ingebouwde LCD als de TFP410 HDMI-encoder aanstuurt – hiermee blijft het ingebouwde LCD zwart terwijl de HDMI-encoder toch wordt gevoed. Op andere OpenMV Cams is er geen gedeelde afnemer en kan dit op de standaardwaarde blijven staan.triple_bufferIndienTrue, worden updates van het scherm niet-blokkerend, ten koste van 3x de displaygrootte aan RAM.portraitVerwisselt de breedte en hoogte van de framesize.controllerGeef een instantie van een controllerchipklasse mee om die samen met het display te initialiseren.backlightGeef een instantie van een module voor de achtergrondverlichting mee die moet worden gebruikt. Standaard wordt de achtergrondverlichting via een GPIO-pin geregeld.- deinit() None¶
Geeft de I/O-pinnen en het RAM die door de klasse worden gebruikt weer vrij. Dit wordt automatisch aangeroepen bij vernietiging.
- clear(display_off: bool = False) None¶
Wist het LCD-scherm naar zwart.
display_offindienTrue, schakelt de displaylogica uit in plaats van de framebuffer naar zwart te wissen. Je moet hierna ook de achtergrondverlichting uitschakelen om er zeker van te zijn dat het scherm zwart wordt, aangezien veel displays wit zijn wanneer alleen de achtergrondverlichting aan is.
- backlight(value: int | None = None) int¶
Stelt de dimwaarde van de LCD-achtergrondverlichting in, van 0 (uit) tot 100 (aan). Geef geen argumenten mee om de huidige waarde van de achtergrondverlichting op te vragen.
Tenzij er een
DACBacklight- ofPWMBacklight-controller aan de constructor is meegegeven, wordt de achtergrondverlichting als een GPIO-pin geregeld en gaat deze alleen van 0 (uit) naar niet-nul (aan).
- 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¶
Geeft een
imageweer waarvan de linkerbovenhoek begint op locatiex,y. In plaats van een afbeeldingsobject kan ook een padstring worden meegegeven om de afbeelding automatisch van schijf te laden.x_scaleregelt hoeveel de weergegeven afbeelding in de x-richting wordt geschaald. Als deze waarde negatief is, wordt de afbeelding horizontaal gespiegeld. Alsy_scaleniet is opgegeven, komt deze overeen metx_scaleom de beeldverhouding te behouden.y_scaleregelt hoeveel de weergegeven afbeelding in de y-richting wordt geschaald. Als deze waarde negatief is, wordt de afbeelding verticaal gespiegeld (vereist triple buffering). Alsx_scaleniet is opgegeven, komt deze overeen mety_scaleom de beeldverhouding te behouden.roiis de rechthoektuple van het aandachtsgebied(x, y, w, h)van de weer te geven afbeelding.rgb_channelis het RGB-kanaal (0=R, 1=G, 2=B) dat uit een RGB565-afbeelding wordt geëxtraheerd en in grijswaarden wordt weergegeven.-1schakelt kanaalextractie uit.alpharegelt hoe ondoorzichtig de afbeelding is, van 0 (volledig transparant / zwart) tot 255 (ondoorzichtig).color_paletteeen RGB565-afbeelding van in totaal 256 pixels die als een kleuropzoektabel wordt gebruikt op de grijswaarde van de invoerafbeelding. Wordt toegepast na dergb_channel-extractie. Mag ook een palet-enum zijn (bijv.image.PALETTE_RAINBOW).alpha_paletteeen GRAYSCALE-afbeelding van in totaal 256 pixels die als een per-pixel alpha-opzoektabel wordt gebruikt op de grijswaarde van de invoerafbeelding. Wordt toegepast na dergb_channel-extractie.hintis een logische OR van de vlaggen:image.AREA: Gebruik gebiedsschaling bij het verkleinen in plaats van nearest neighbor.image.BILINEAR: Gebruik bilineaire schaling in plaats van nearest neighbor.image.BICUBIC: Gebruik bicubische schaling in plaats van nearest neighbor.image.CENTER: Centreer de afbeelding op het display (toegepast na het schalen).image.HMIRROR: Spiegel de afbeelding horizontaal.image.VFLIP: Spiegel de afbeelding verticaal.image.TRANSPOSE: Transponeer de afbeelding (verwissel x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Voer dergb_channel-extractie uit vóór het schalen.image.APPLY_COLOR_PALETTE_FIRST: Pascolor_palettetoe vóór het schalen.image.SCALE_ASPECT_KEEP: Schaal de afbeelding zodat deze binnen het display past.image.SCALE_ASPECT_EXPAND: Schaal de afbeelding zodat deze het display vult (bijsnijden).image.SCALE_ASPECT_IGNORE: Schaal de afbeelding zodat deze het display vult (uitrekken).image.ROTATE_90: Roteer met 90 graden (VFLIP | TRANSPOSE).image.ROTATE_180: Roteer met 180 graden (HMIRROR | VFLIP).image.ROTATE_270: Roteer met 270 graden (HMIRROR | TRANSPOSE).