class RGBDisplay – Controlador de pantalla RGB

La clase RGBDisplay controla pantallas LCD RGB paralelas de 24 bits a través del controlador STM32 LTDC (LCD-TFT). El LTDC transmite los píxeles directamente desde un framebuffer respaldado por SDRAM al reloj de píxeles elegido, por lo que es posible alcanzar tasas de refresco altas (hasta 120 Hz) sin intervención de la CPU.

En la OpenMV Cam Pure Thermal, el mismo bus paralelo de 24 bits también alimenta un codificador HDMI TFP410 integrado, por lo que su salida HDMI también se controla a través de esta clase. Utilice display_on=False para apagar la pantalla LCD integrada mientras se siguen enviando píxeles al codificador.

La resolución del panel se selecciona mediante framesize usando las constantes definidas en el módulo display (QVGA, VGA, WVGA, HD, FHD, …). Las secuencias de inicialización específicas de cada panel se conectan mediante el argumento de palabra clave controller (por ejemplo, ST7701 para paneles basados en ST7701). El brillo de la retroiluminación se controla como un simple GPIO de forma predeterminada, o mediante DACBacklight / PWMBacklight si se pasa uno como backlight.

Los fotogramas se presentan llamando a write() con una image.Image. El controlador gestiona internamente la conversión RGB, el escalado, la ROI, la paleta y las transformaciones de orientación.

Ejemplo – reflejar la cámara en un panel de 480x272 a 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)

Constructores

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 Una de las resoluciones estándar admitidas (véanse las constantes del módulo display).

refresh Establece la tasa de refresco de la pantalla en hercios (30-120). Esto controla el reloj de píxeles del LCD RGB.

display_on Habilita la salida LCD local. Pase False en la OpenMV Cam Pure Thermal, cuyo bus paralelo de 24 bits controla tanto la pantalla LCD integrada como el codificador HDMI TFP410; esto mantiene la pantalla LCD integrada apagada mientras se sigue alimentando el codificador HDMI. En otras OpenMV Cams no hay un destino compartido y se puede dejar en su valor predeterminado.

triple_buffer Si es True, hace que las actualizaciones de la pantalla no sean bloqueantes a costa de triplicar el tamaño de la pantalla en RAM.

portrait Intercambia el ancho y el alto del framesize.

controller Pase una instancia de la clase del chip controlador para inicializarlo junto con la pantalla.

backlight Pase una instancia del módulo controlador de retroiluminación a usar. De forma predeterminada, la retroiluminación se controla mediante un pin GPIO.

deinit() None

Libera los pines de E/S y la RAM utilizados por la clase. Esto se llama automáticamente al destruirse.

width() int

Devuelve el ancho de la pantalla.

height() int

Devuelve el alto de la pantalla.

triple_buffer() bool

Devuelve si el triple búfer está habilitado.

bgr() bool

Devuelve si los canales rojo y azul están intercambiados.

byte_swap() bool

Devuelve si los bytes de los píxeles RGB565 se intercambian en la salida.

framesize() int

Devuelve la constante de framesize con la que se configuró la pantalla.

refresh() int

Devuelve la tasa de refresco.

clear(display_off: bool = False) None

Borra la pantalla LCD a negro.

display_off si es True, apaga la lógica de la pantalla en lugar de borrar el framebuffer a negro. También debe apagar la retroiluminación después de esto para asegurarse de que la pantalla se vuelva negra, ya que muchas pantallas se ven blancas cuando solo está encendida la retroiluminación.

backlight(value: int | None = None) int

Establece el valor de atenuación de la retroiluminación del LCD, de 0 (apagado) a 100 (encendido). No pase argumentos para obtener el valor actual de la retroiluminación.

A menos que se haya pasado un controlador DACBacklight o PWMBacklight al constructor, la retroiluminación se controla como un pin GPIO y solo irá de 0 (apagado) a un valor distinto de cero (encendido).

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

Muestra una image cuya esquina superior izquierda comienza en la ubicación x, y. También se puede pasar una cadena de ruta en lugar de un objeto de imagen para cargar automáticamente la imagen desde el disco.

x_scale controla cuánto se escala la imagen mostrada en la dirección x. Si este valor es negativo, la imagen se volteará horizontalmente. Si no se especifica y_scale, este coincidirá con x_scale para mantener la relación de aspecto.

y_scale controla cuánto se escala la imagen mostrada en la dirección y. Si este valor es negativo, la imagen se volteará verticalmente (requiere triple búfer). Si no se especifica x_scale, este coincidirá con y_scale para mantener la relación de aspecto.

roi es la tupla del rectángulo de región de interés (x, y, w, h) de la imagen a mostrar.

rgb_channel es el canal RGB (0=R, 1=G, 2=B) a extraer de una imagen RGB565 y renderizar en escala de grises. -1 desactiva la extracción de canal.

alpha controla cuán opaca es la imagen, de 0 (totalmente transparente / negro) a 255 (opaco).

color_palette una imagen RGB565 de 256 píxeles en total usada como tabla de búsqueda de color sobre el valor en escala de grises de la imagen de entrada. Se aplica después de la extracción de rgb_channel. También puede ser un enum de paleta (p. ej. image.PALETTE_RAINBOW).

alpha_palette una imagen GRAYSCALE de 256 píxeles en total usada como tabla de búsqueda de alfa por píxel sobre el valor en escala de grises de la imagen de entrada. Se aplica después de la extracción de rgb_channel.

hint es un OR lógico de las banderas: