class TVDisplay -- TV Shield 驅動程式

TVDisplay 類別驅動 OpenMV TV Shield,它將 RGB565 影格緩衝區轉換為 NTSC 複合視訊訊號(352x240,60 場/秒交錯),適用於任何電視或類比視訊監視器。

支援兩種擴充板變體:

  • 有線的 TV Shield,它在單一 RCA 接頭上輸出複合訊號。

  • Wireless 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,則使對螢幕的更新成為非阻塞式,代價是在 RAM 中需要 3 倍的顯示大小。預設值因板而異。

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 為下列各旗標的邏輯 OR:

clear(display_off: bool = False) None

將螢幕清除為黑色。

display_off 為了與其他顯示器類別的 API 相容而被接受,但會被忽略。

ioctl(cmd: int, *args) object

通用 ioctl 進入點。

display.IOCTL_CHANNEL 作為 cmd 傳入以設定或取得無線 TV 擴充板的廣播通道。帶第二個引數(1-8)時設定通道;無第二個引數時回傳目前通道。在第一次設定呼叫進行之前未選擇任何通道。