class RGBDisplay -- RGB 显示驱动

RGBDisplay 类通过 STM32 LTDC(LCD-TFT)控制器驱动 24 位并行 RGB LCD。LTDC 以所选的像素时钟直接从 SDRAM 支持的帧缓冲区中流式输出像素,因此无需 CPU 参与即可实现高刷新率(最高 120 Hz)。

在 OpenMV Cam Pure Thermal 上,同一条 24 位并行总线还会馈送一个板载 TFP410 HDMI 编码器,因此其 HDMI 输出也由该类驱动——使用 display_on=False 可在仍向编码器输出像素时钟的同时使板载 LCD 黑屏。

面板分辨率通过 framesize 选择,使用 display 模块中定义的常量(QVGAVGAWVGAHDFHD 等)。面板专用的初始化序列通过 controller 关键字参数插入(例如基于 ST7701 的面板使用 ST7701)。背光亮度默认作为简单的 GPIO 驱动,或者在通过 backlight 传入 DACBacklight / PWMBacklight 时由其驱动。

通过调用 write() 并传入 image.Image 来呈现帧。驱动会在内部处理 RGB 转换、缩放、ROI、调色板和方向变换。

示例——以 60 Hz 将摄像头镜像到 480x272 面板上:

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)

构造函数

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 标准支持的分辨率之一(参见 display 模块常量)。

refresh 设置屏幕刷新率,单位为赫兹(30-120)。这控制 RGB LCD 的像素时钟。

display_on 启用本地 LCD 输出。在 OpenMV Cam Pure Thermal 上请传入 False,其 24 位并行总线同时驱动板载 LCD 和 TFP410 HDMI 编码器——这会使板载 LCD 保持黑屏,同时仍向 HDMI 编码器馈送数据。在其他 OpenMV Cam 上没有共享接收端,可保持其默认值。

triple_buffer 如果为 True,则使屏幕更新变为非阻塞,代价是占用 3 倍显示尺寸的 RAM。

portrait 交换 framesize 的宽度和高度。

controller 传入控制器芯片类实例,以便在初始化显示器时一并将其初始化。

backlight 传入要使用的背光控制器模块实例。默认情况下,背光将通过 GPIO 引脚控制。

deinit() None

释放该类使用的 I/O 引脚和 RAM。该方法在析构时自动调用。

width() int

返回屏幕的宽度。

height() int

返回屏幕的高度。

triple_buffer() bool

返回是否启用了三重缓冲。

bgr() bool

返回红色和蓝色通道是否被交换。

byte_swap() bool

返回输出时 RGB565 像素字节是否被交换。

framesize() int

返回显示器配置时所用的 framesize 常量。

refresh() int

返回刷新率。

clear(display_off: bool = False) None

将 LCD 屏幕清为黑色。

display_off 如果为 True,则关闭显示逻辑,而不是将帧缓冲区清为黑色。此后还应关闭背光以确保屏幕变黑,因为许多显示器在仅有背光开启时呈现白色。

backlight(value: int | None = None) int

设置 LCD 背光调光值,从 0(关闭)到 100(开启)。不传入参数则返回当前背光值。

除非向构造函数传入了 DACBacklightPWMBacklight 控制器,否则背光将作为 GPIO 引脚控制,只能在 0(关闭)和非零(开启)之间切换。

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

显示一个 image,其左上角从位置 xy 开始。也可以传入路径字符串代替图像对象,以自动从磁盘加载图像。

x_scale 控制所显示图像在 x 方向上的缩放比例。如果该值为负,图像将水平翻转。如果未指定 y_scale,它将与 x_scale 匹配以保持纵横比。

y_scale 控制所显示图像在 y 方向上的缩放比例。如果该值为负,图像将垂直翻转(需要三重缓冲)。如果未指定 x_scale,它将与 y_scale 匹配以保持纵横比。

roi 是要显示的图像的感兴趣区域矩形元组 (x, y, w, h)

rgb_channel 是要从 RGB565 图像中提取并以灰度呈现的 RGB 通道(0=R,1=G,2=B)。-1 禁用通道提取。

alpha 控制图像的不透明度,从 0(完全透明 / 黑色)到 255(不透明)。

color_palette 一张共 256 像素的 RGB565 图像,用作针对输入图像灰度值的颜色查找表。在 rgb_channel 提取之后应用。也可以是调色板枚举(例如 image.PALETTE_RAINBOW)。

alpha_palette 一张共 256 像素的 GRAYSCALE 图像,用作针对输入图像灰度值的逐像素 alpha 查找表。在 rgb_channel 提取之后应用。

hint 是以下标志的逻辑或: