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)¶
framesizeSalah satu resolusi standar yang didukung (lihat konstanta moduldisplay).refreshMengatur refresh rate layar dalam hertz (30-120). Ini mengontrol clock piksel LCD RGB.display_onMengaktifkan output LCD lokal. OperFalsepada 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_bufferJikaTrue, membuat pembaruan layar menjadi non-blocking dengan biaya 3x ukuran tampilan dalam RAM.portraitMenukar lebar dan tinggi framesize.controllerOper instans kelas chip kontroler untuk menginisialisasinya bersama tampilan.backlightOper 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.
- clear(display_off: bool = False) None¶
Membersihkan layar LCD menjadi hitam.
display_offjikaTrue, 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
DACBacklightatauPWMBacklightditeruskan 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
imageyang sudut kiri atasnya dimulai pada lokasix,y. String path juga dapat diteruskan alih-alih objek citra untuk memuat citra secara otomatis dari disk.x_scalemengontrol seberapa besar citra yang ditampilkan diskalakan dalam arah x. Jika nilai ini negatif, citra akan dibalik secara horizontal. Jikay_scaletidak ditentukan, nilainya akan mengikutix_scaleuntuk mempertahankan rasio aspek.y_scalemengontrol seberapa besar citra yang ditampilkan diskalakan dalam arah y. Jika nilai ini negatif, citra akan dibalik secara vertikal (memerlukan triple buffering). Jikax_scaletidak ditentukan, nilainya akan mengikutiy_scaleuntuk mempertahankan rasio aspek.roiadalah tuple persegi panjang wilayah yang diminati(x, y, w, h)dari citra yang akan ditampilkan.rgb_channeladalah saluran RGB (0=R, 1=G, 2=B) yang diekstrak dari citra RGB565 dan dirender dalam skala abu-abu.-1menonaktifkan ekstraksi saluran.alphamengontrol seberapa buram citra, dari 0 (sepenuhnya transparan / hitam) hingga 255 (buram).color_palettesebuah citra RGB565 berisi 256 piksel yang digunakan sebagai tabel pencarian warna pada nilai skala abu-abu dari citra input. Diterapkan setelah ekstraksirgb_channel. Bisa juga berupa enum palet (mis.image.PALETTE_RAINBOW).alpha_palettesebuah citra GRAYSCALE berisi 256 piksel yang digunakan sebagai tabel pencarian alpha per piksel pada nilai skala abu-abu dari citra input. Diterapkan setelah ekstraksirgb_channel.hintadalah OR logika dari flag-flag:image.AREA: Gunakan penskalaan area saat memperkecil alih-alih tetangga terdekat.image.BILINEAR: Gunakan penskalaan bilinear alih-alih tetangga terdekat.image.BICUBIC: Gunakan penskalaan bicubic alih-alih tetangga terdekat.image.CENTER: Pusatkan citra pada tampilan (diterapkan setelah penskalaan).image.HMIRROR: Cerminkan citra secara horizontal.image.VFLIP: Balik citra secara vertikal.image.TRANSPOSE: Transpose citra (tukar x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Lakukan ekstraksirgb_channelsebelum penskalaan.image.APPLY_COLOR_PALETTE_FIRST: Terapkancolor_palettesebelum penskalaan.image.SCALE_ASPECT_KEEP: Skalakan citra agar muat di dalam tampilan.image.SCALE_ASPECT_EXPAND: Skalakan citra untuk mengisi tampilan (dengan pemotongan).image.SCALE_ASPECT_IGNORE: Skalakan citra untuk mengisi tampilan (dengan peregangan).image.ROTATE_90: Putar 90 derajat (VFLIP | TRANSPOSE).image.ROTATE_180: Putar 180 derajat (HMIRROR | VFLIP).image.ROTATE_270: Putar 270 derajat (HMIRROR | TRANSPOSE).