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 模块中定义的常量(QVGA、VGA、WVGA、HD、FHD 等)。面板专用的初始化序列通过 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 引脚控制。- clear(display_off: bool = False) None¶
将 LCD 屏幕清为黑色。
display_off如果为True,则关闭显示逻辑,而不是将帧缓冲区清为黑色。此后还应关闭背光以确保屏幕变黑,因为许多显示器在仅有背光开启时呈现白色。
- backlight(value: int | None = None) int¶
设置 LCD 背光调光值,从 0(关闭)到 100(开启)。不传入参数则返回当前背光值。
除非向构造函数传入了
DACBacklight或PWMBacklight控制器,否则背光将作为 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,其左上角从位置x、y开始。也可以传入路径字符串代替图像对象,以自动从磁盘加载图像。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是以下标志的逻辑或:image.AREA:在缩小时使用面积缩放而非最近邻。image.BILINEAR:使用双线性缩放而非最近邻。image.BICUBIC:使用双三次缩放而非最近邻。image.CENTER:在显示器上居中图像(缩放后应用)。image.HMIRROR:水平镜像图像。image.VFLIP:垂直翻转图像。image.TRANSPOSE:转置图像(交换 x/y)。image.EXTRACT_RGB_CHANNEL_FIRST:在缩放之前执行rgb_channel提取。image.APPLY_COLOR_PALETTE_FIRST:在缩放之前应用color_palette。image.SCALE_ASPECT_KEEP:缩放图像以适应显示器内部。image.SCALE_ASPECT_EXPAND:缩放图像以填满显示器(裁剪)。image.SCALE_ASPECT_IGNORE:缩放图像以填满显示器(拉伸)。image.ROTATE_90:旋转 90 度(VFLIP | TRANSPOSE)。image.ROTATE_180:旋转 180 度(HMIRROR | VFLIP)。image.ROTATE_270:旋转 270 度(HMIRROR | TRANSPOSE)。