klasa RGBDisplay – sterownik wyświetlacza RGB¶
Klasa RGBDisplay obsługuje 24-bitowe równoległe wyświetlacze LCD RGB poprzez kontroler STM32 LTDC (LCD-TFT). LTDC strumieniuje piksele bezpośrednio z bufora ramki umieszczonego w SDRAM przy wybranym zegarze pikseli, dzięki czemu możliwe są wysokie częstotliwości odświeżania (do 120 Hz) bez angażowania CPU.
Na OpenMV Cam Pure Thermal ta sama 24-bitowa magistrala równoległa zasila również wbudowany koder HDMI TFP410, więc jej wyjście HDMI jest sterowane także przez tę klasę – użyj display_on=False, aby wygasić wbudowany LCD, jednocześnie nadal taktując piksele do kodera.
Rozdzielczość panelu wybiera się przez framesize przy użyciu stałych zdefiniowanych w module display (QVGA, VGA, WVGA, HD, FHD, …). Sekwencje inicjalizacji specyficzne dla panelu podłącza się poprzez argument nazwany controller (na przykład ST7701 dla paneli opartych na ST7701). Jasność podświetlenia jest domyślnie sterowana jako zwykły GPIO lub przez DACBacklight / PWMBacklight, jeśli zostanie przekazany jako backlight.
Ramki są wyświetlane przez wywołanie write() z obiektem image.Image. Sterownik wewnętrznie obsługuje konwersję RGB, skalowanie, ROI, paletę oraz przekształcenia orientacji.
Przykład – odbicie obrazu z kamery na panelu 480x272 przy 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)
Konstruktory¶
- 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 ze standardowych obsługiwanych rozdzielczości (zobacz stałe modułudisplay).refreshUstawia częstotliwość odświeżania ekranu w hercach (30-120). Steruje to zegarem pikseli LCD RGB.display_onWłącza lokalne wyjście LCD. PrzekażFalsena OpenMV Cam Pure Thermal, której 24-bitowa magistrala równoległa steruje zarówno wbudowanym LCD, jak i koderem HDMI TFP410 – utrzymuje to wbudowany LCD wygaszony, jednocześnie nadal zasilając koder HDMI. Na innych OpenMV Cam nie ma współdzielonego odbiornika i można pozostawić wartość domyślną.triple_bufferJeśliTrue, sprawia, że aktualizacje ekranu są nieblokujące kosztem 3-krotności rozmiaru wyświetlacza w pamięci RAM.portraitZamienia szerokość i wysokość framesize.controllerPrzekaż instancję klasy układu kontrolera, aby zainicjalizować go wraz z wyświetlaczem.backlightPrzekaż instancję modułu kontrolera podświetlenia do użycia. Domyślnie podświetlenie jest sterowane przez pin GPIO.- deinit() None¶
Zwalnia piny I/O oraz pamięć RAM używaną przez klasę. Jest to wywoływane automatycznie podczas niszczenia obiektu.
- clear(display_off: bool = False) None¶
Czyści ekran LCD do koloru czarnego.
display_offjeśliTrue, wyłącza logikę wyświetlacza zamiast czyścić bufor ramki do koloru czarnego. Należy również wyłączyć podświetlenie po tej operacji, aby zapewnić, że ekran stanie się czarny, ponieważ wiele wyświetlaczy jest białych, gdy włączone jest tylko podświetlenie.
- backlight(value: int | None = None) int¶
Ustawia wartość przyciemnienia podświetlenia LCD, od 0 (wyłączone) do 100 (włączone). Wywołaj bez argumentów, aby uzyskać bieżącą wartość podświetlenia.
O ile do konstruktora nie przekazano kontrolera
DACBacklightlubPWMBacklight, podświetlenie jest sterowane jako pin GPIO i przyjmuje tylko wartości od 0 (wyłączone) do niezerowej (włączone).
- 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¶
Wyświetla obiekt
image, którego lewy górny róg zaczyna się w lokalizacjix,y. Zamiast obiektu obrazu można również przekazać ścieżkę w postaci łańcucha znaków, aby automatycznie wczytać obraz z dysku.x_scalesteruje tym, jak bardzo wyświetlany obraz jest skalowany w kierunku x. Jeśli wartość jest ujemna, obraz zostanie odbity poziomo. Jeśliy_scalenie jest podane, przyjmie wartośćx_scale, aby zachować proporcje.y_scalesteruje tym, jak bardzo wyświetlany obraz jest skalowany w kierunku y. Jeśli wartość jest ujemna, obraz zostanie odbity pionowo (wymaga potrójnego buforowania). Jeślix_scalenie jest podane, przyjmie wartośćy_scale, aby zachować proporcje.roito krotka prostokąta obszaru zainteresowania(x, y, w, h)obrazu do wyświetlenia.rgb_channelto kanał RGB (0=R, 1=G, 2=B), który ma zostać wyodrębniony z obrazu RGB565 i wyrenderowany w skali szarości.-1wyłącza wyodrębnianie kanału.alphasteruje tym, jak nieprzezroczysty jest obraz, od 0 (całkowicie przezroczysty / czarny) do 255 (nieprzezroczysty).color_paletteobraz RGB565 o łącznej liczbie 256 pikseli używany jako tablica odwzorowania kolorów dla wartości w skali szarości obrazu wejściowego. Stosowany po wyodrębnieniurgb_channel. Może to być również wyliczenie palety (np.image.PALETTE_RAINBOW).alpha_paletteobraz GRAYSCALE o łącznej liczbie 256 pikseli używany jako tablica odwzorowania alpha dla poszczególnych pikseli na podstawie wartości w skali szarości obrazu wejściowego. Stosowany po wyodrębnieniurgb_channel.hintto logiczna suma (OR) flag:image.AREA: Użyj skalowania obszarowego przy zmniejszaniu zamiast metody najbliższego sąsiada.image.BILINEAR: Użyj skalowania dwuliniowego zamiast metody najbliższego sąsiada.image.BICUBIC: Użyj skalowania dwusześciennego zamiast metody najbliższego sąsiada.image.CENTER: Wyśrodkuj obraz na wyświetlaczu (stosowane po skalowaniu).image.HMIRROR: Odbij obraz poziomo.image.VFLIP: Odbij obraz pionowo.image.TRANSPOSE: Transponuj obraz (zamień x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Wykonaj wyodrębnianiergb_channelprzed skalowaniem.image.APPLY_COLOR_PALETTE_FIRST: Zastosujcolor_paletteprzed skalowaniem.image.SCALE_ASPECT_KEEP: Skaluj obraz tak, aby zmieścił się w obrębie wyświetlacza.image.SCALE_ASPECT_EXPAND: Skaluj obraz tak, aby wypełnił wyświetlacz (z przycięciem).image.SCALE_ASPECT_IGNORE: Skaluj obraz tak, aby wypełnił wyświetlacz (z rozciągnięciem).image.ROTATE_90: Obróć o 90 stopni (VFLIP | TRANSPOSE).image.ROTATE_180: Obróć o 180 stopni (HMIRROR | VFLIP).image.ROTATE_270: Obróć o 270 stopni (HMIRROR | TRANSPOSE).