class TVDisplay -- TV Shield 驱动

TVDisplay 类驱动 OpenMV TV Shield,它将 RGB565 帧缓冲区转换为适用于任何电视或模拟视频监视器的 NTSC 复合视频信号(352x240,60 场/秒隔行扫描)。

支持两种 Shield 变体:

  • 有线 TV Shield,它在单个 RCA 插孔上输出复合信号。

  • 无线 TV Shield,它将相同的信号馈送到 2.4 GHz 模拟视频发射器。接收器通道(1--8)在运行时通过 ioctl() 配合 display.IOCTL_CHANNEL 选择;在进行该调用之前不会选择任何通道。

分辨率和帧格式是固定的 —— TVDisplay 不接受 framesize 参数。通过将 image.Image 传给 write() 来呈现帧,该方法在内部处理缩放、ROI、调色板和方向变换。

用法示例:

import csi
import display

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.SIF)              # 352x240, matches the TV output

tv = display.TVDisplay()

while True:
    tv.write(csi0.snapshot())

构造函数

class display.TVDisplay(triple_buffer: bool = True)

triple_buffer 若为 True,则以 3 倍于显示尺寸的 RAM 为代价,使屏幕更新变为非阻塞。默认值取决于具体板卡。

deinit() None

释放该类所用的 I/O 引脚和 RAM。这会在析构时自动调用。

width() int

返回屏幕宽度(352)。

height() int

返回屏幕高度(240)。

refresh() int

返回刷新率(60)。

triple_buffer() bool

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

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 = 256, color_palette: int | 'image.Image' | None = None, alpha_palette: 'image.Image' | None = None, hint: int = 0) None

显示一个 image,其左上角从位置 x、y 开始。

x_scale 控制所显示图像在 x 方向上的缩放比例(浮点数)。如果此值为负,图像将水平翻转。

y_scale 控制所显示图像在 y 方向上的缩放比例(浮点数)。如果此值为负,图像将垂直翻转。

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

rgb_channel 是要从 RGB565 图像中提取并在显示器上渲染的 RGB 通道(0=R,G=1,B=2)。

alpha 控制图像的不透明程度。值为 256 时显示不透明图像,低于 256 的值会产生黑色透明图像。0 会得到完全黑色的图像。

color_palette 若不为 -1,可以是一个调色板枚举,或一个总计 256 像素的 RGB565 图像,用作输入图像灰度值上的颜色查找表。

alpha_palette 若不为 -1,可以是一个总计 256 像素的 GRAYSCALE 图像,用作 alpha 调色板,在逐像素级别上调制输入图像的 alpha 值。

hint 以下各标志的逻辑或:

clear(display_off: bool = False) None

将屏幕清为黑色。

display_off 是为了与其他显示类的 API 兼容而接受的,会被忽略。

ioctl(cmd: int, *args) object

通用 ioctl 入口点。

传入 display.IOCTL_CHANNEL 作为 cmd 以设置或获取无线 TV Shield 的广播通道。带第二个参数(1-8)时设置通道;不带第二个参数时返回当前通道。在首次设置调用之前不会选择任何通道。