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 驅動,若將 DACBacklight / PWMBacklight 作為 backlight 傳入則改由其驅動。

影格是透過以 image.Image 呼叫 write() 來呈現的。此驅動程式會在內部處理 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,會使螢幕更新成為非阻塞式,代價是 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 為下列旗標的邏輯 OR: