kelas RGBDisplay -- Driver Tampilan RGB

Kelas RGBDisplay menggerakkan LCD RGB paralel 24-bit melalui kontroler STM32 LTDC (LCD-TFT). LTDC mengalirkan piksel langsung dari buffer bingkai berbasis SDRAM pada clock piksel yang dipilih, sehingga refresh rate tinggi (hingga 120 Hz) dimungkinkan tanpa keterlibatan CPU.

Pada OpenMV Cam Pure Thermal, bus paralel 24-bit yang sama juga memberi makan encoder HDMI TFP410 yang terpasang di board, sehingga output HDMI-nya juga dikendalikan melalui kelas ini -- gunakan display_on=False untuk memadamkan LCD on-board sambil tetap mengalirkan piksel ke encoder.

Resolusi panel dipilih melalui framesize menggunakan konstanta yang didefinisikan di modul display (QVGA, VGA, WVGA, HD, FHD, ...). Urutan inisialisasi spesifik panel disisipkan melalui argumen kata kunci controller (misalnya ST7701 untuk panel berbasis ST7701). Kecerahan backlight dikendalikan sebagai GPIO sederhana secara default, atau oleh DACBacklight / PWMBacklight jika salah satunya diteruskan sebagai backlight.

Bingkai ditampilkan dengan memanggil write() dengan sebuah image.Image. Driver menangani konversi RGB, penskalaan, ROI, palet, dan transformasi orientasi secara internal.

Contoh -- mencerminkan kamera ke panel 480x272 pada 60 Hz:

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)

Konstruktor

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 Salah satu resolusi standar yang didukung (lihat konstanta modul display).

refresh Mengatur refresh rate layar dalam hertz (30-120). Ini mengontrol clock piksel LCD RGB.

display_on Mengaktifkan output LCD lokal. Oper False pada OpenMV Cam Pure Thermal, yang bus paralel 24-bit-nya menggerakkan baik LCD on-board maupun encoder HDMI TFP410 -- ini menjaga LCD on-board tetap kosong sambil tetap memberi makan encoder HDMI. Pada OpenMV Cam lainnya tidak ada sink bersama dan ini dapat dibiarkan pada nilai defaultnya.

triple_buffer Jika True, membuat pembaruan layar menjadi non-blocking dengan biaya 3x ukuran tampilan dalam RAM.

portrait Menukar lebar dan tinggi framesize.

controller Oper instans kelas chip kontroler untuk menginisialisasinya bersama tampilan.

backlight Oper instans modul kontroler backlight yang akan digunakan. Secara default backlight akan dikendalikan melalui pin GPIO.

deinit() None

Melepaskan pin I/O dan RAM yang digunakan oleh kelas. Ini dipanggil secara otomatis saat penghancuran objek.

width() int

Mengembalikan lebar layar.

height() int

Mengembalikan tinggi layar.

triple_buffer() bool

Mengembalikan apakah triple buffering diaktifkan.

bgr() bool

Mengembalikan apakah saluran merah dan biru ditukar.

byte_swap() bool

Mengembalikan apakah byte piksel RGB565 ditukar pada output.

framesize() int

Mengembalikan konstanta framesize yang dikonfigurasi untuk tampilan.

refresh() int

Mengembalikan refresh rate.

clear(display_off: bool = False) None

Membersihkan layar LCD menjadi hitam.

display_off jika True, mematikan logika tampilan alih-alih membersihkan buffer bingkai menjadi hitam. Anda juga harus mematikan backlight setelahnya untuk memastikan layar menjadi hitam, karena banyak tampilan berwarna putih ketika hanya backlight yang menyala.

backlight(value: int | None = None) int

Mengatur nilai redupan backlight LCD, dari 0 (mati) hingga 100 (menyala). Oper tanpa argumen untuk mendapatkan nilai backlight saat ini.

Kecuali kontroler DACBacklight atau PWMBacklight diteruskan ke konstruktor, backlight dikendalikan sebagai pin GPIO dan hanya akan berpindah dari 0 (mati) ke non-nol (menyala).

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

Menampilkan image yang sudut kiri atasnya dimulai pada lokasi x, y. String path juga dapat diteruskan alih-alih objek citra untuk memuat citra secara otomatis dari disk.

x_scale mengontrol seberapa besar citra yang ditampilkan diskalakan dalam arah x. Jika nilai ini negatif, citra akan dibalik secara horizontal. Jika y_scale tidak ditentukan, nilainya akan mengikuti x_scale untuk mempertahankan rasio aspek.

y_scale mengontrol seberapa besar citra yang ditampilkan diskalakan dalam arah y. Jika nilai ini negatif, citra akan dibalik secara vertikal (memerlukan triple buffering). Jika x_scale tidak ditentukan, nilainya akan mengikuti y_scale untuk mempertahankan rasio aspek.

roi adalah tuple persegi panjang wilayah yang diminati (x, y, w, h) dari citra yang akan ditampilkan.

rgb_channel adalah saluran RGB (0=R, 1=G, 2=B) yang diekstrak dari citra RGB565 dan dirender dalam skala abu-abu. -1 menonaktifkan ekstraksi saluran.

alpha mengontrol seberapa buram citra, dari 0 (sepenuhnya transparan / hitam) hingga 255 (buram).

color_palette sebuah citra RGB565 berisi 256 piksel yang digunakan sebagai tabel pencarian warna pada nilai skala abu-abu dari citra input. Diterapkan setelah ekstraksi rgb_channel. Bisa juga berupa enum palet (mis. image.PALETTE_RAINBOW).

alpha_palette sebuah citra GRAYSCALE berisi 256 piksel yang digunakan sebagai tabel pencarian alpha per piksel pada nilai skala abu-abu dari citra input. Diterapkan setelah ekstraksi rgb_channel.

hint adalah OR logika dari flag-flag: