class RGBDisplay – RGB Ekran Sürücüsü

RGBDisplay sınıfı, 24 bit paralel RGB LCD’leri STM32 LTDC (LCD-TFT) denetleyicisi üzerinden sürer. LTDC, pikselleri SDRAM destekli bir çerçeve arabelleğinden (frame buffer) seçilen piksel saatinde doğrudan akıtır; böylece CPU müdahalesi olmadan yüksek yenileme hızları (120 Hz’e kadar) mümkün olur.

OpenMV Cam Pure Thermal üzerinde aynı 24 bit paralel veri yolu, kart üzerindeki bir TFP410 HDMI kodlayıcısını da besler; bu nedenle onun HDMI çıkışı da bu sınıf üzerinden sürülür – pikselleri kodlayıcıya saatlemeyi sürdürürken kart üzerindeki LCD’yi karartmak için display_on=False kullanın.

Panel çözünürlüğü, display modülünde tanımlanan sabitler kullanılarak framesize ile seçilir (QVGA, VGA, WVGA, HD, FHD, …). Panele özgü ilklendirme dizileri controller anahtar sözcük argümanı aracılığıyla takılır (örneğin ST7701 tabanlı paneller için ST7701). Arka aydınlatma parlaklığı varsayılan olarak basit bir GPIO olarak sürülür ya da backlight olarak biri geçilirse DACBacklight / PWMBacklight ile sürülür.

Çerçeveler, bir image.Image ile write() çağrılarak sunulur. Sürücü; RGB dönüşümünü, ölçeklemeyi, ROI’yi, paleti ve yönlendirme dönüşümlerini dahili olarak ele alır.

Örnek – kamerayı 60 Hz’de 480x272’lik bir panele yansıtmak:

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)

Kurucular

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 Standart desteklenen çözünürlüklerden biri (display modülü sabitlerine bakın).

refresh Ekran yenileme hızını hertz cinsinden ayarlar (30-120). Bu, RGB LCD piksel saatini denetler.

display_on Yerel LCD çıkışını etkinleştirir. 24 bit paralel veri yolu hem kart üzerindeki LCD’yi hem de TFP410 HDMI kodlayıcısını süren OpenMV Cam Pure Thermal üzerinde False geçin – bu, HDMI kodlayıcısını beslemeyi sürdürürken kart üzerindeki LCD’yi karartılmış tutar. Diğer OpenMV Cam’lerde paylaşılan bir alıcı yoktur ve bu varsayılan değerinde bırakılabilir.

triple_buffer True ise, RAM’de ekran boyutunun 3 katı maliyetiyle ekran güncellemelerini bloklamayan hale getirir.

portrait Çerçeve boyutunun genişlik ve yüksekliğini değiştirir.

controller Ekranla birlikte ilklendirmek üzere bir denetleyici yonga sınıfı örneği geçin.

backlight Kullanılacak bir arka aydınlatma denetleyici modülü örneği geçin. Varsayılan olarak arka aydınlatma bir GPIO pini üzerinden denetlenir.

deinit() None

Sınıfın kullandığı G/Ç pinlerini ve RAM’i serbest bırakır. Bu, yok edilme sırasında otomatik olarak çağrılır.

width() int

Ekranın genişliğini döndürür.

height() int

Ekranın yüksekliğini döndürür.

triple_buffer() bool

Üçlü arabelleğin (triple buffering) etkin olup olmadığını döndürür.

bgr() bool

Kırmızı ve mavi kanalların değiş tokuş edilip edilmediğini döndürür.

byte_swap() bool

RGB565 piksel baytlarının çıkışta değiş tokuş edilip edilmediğini döndürür.

framesize() int

Ekranın yapılandırıldığı framesize sabitini döndürür.

refresh() int

Yenileme hızını döndürür.

clear(display_off: bool = False) None

LCD ekranını siyaha temizler.

display_off True ise, çerçeve arabelleğini siyaha temizlemek yerine ekran mantığını kapatır. Bunun ardından arka aydınlatmayı da kapatmalısınız; çünkü birçok ekran yalnızca arka aydınlatma açıkken beyaz görünür ve böylece ekranın siyah olmasını sağlarsınız.

backlight(value: int | None = None) int

LCD arka aydınlatma kısma değerini 0 (kapalı) ile 100 (açık) arasında ayarlar. Geçerli arka aydınlatma değerini almak için argüman geçmeyin.

Kurucuya bir DACBacklight veya PWMBacklight denetleyicisi geçilmedikçe, arka aydınlatma bir GPIO pini olarak denetlenir ve yalnızca 0 (kapalı) ile sıfırdan farklı (açık) arasında gider.

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

Sol üst köşesi x, y konumundan başlayan bir image görüntüsünü görüntüler. Görüntüyü diskten otomatik olarak yüklemek için bir görüntü nesnesi yerine bir yol dizesi de geçilebilir.

x_scale görüntülenen görüntünün x yönünde ne kadar ölçekleneceğini denetler. Bu değer negatifse görüntü yatay olarak çevrilir. y_scale belirtilmezse en boy oranını korumak için x_scale ile eşleşir.

y_scale görüntülenen görüntünün y yönünde ne kadar ölçekleneceğini denetler. Bu değer negatifse görüntü dikey olarak çevrilir (üçlü arabellek gerektirir). x_scale belirtilmezse en boy oranını korumak için y_scale ile eşleşir.

roi görüntülenecek görüntünün ilgi bölgesi (ROI) dikdörtgen demetidir (x, y, w, h).

rgb_channel bir RGB565 görüntüsünden ayıklanıp gri tonlamada işlenecek RGB kanalıdır (0=R, 1=G, 2=B). -1 kanal ayıklamayı devre dışı bırakır.

alpha görüntünün ne kadar opak olduğunu denetler; 0 (tümüyle saydam / siyah) ile 255 (opak) arasında.

color_palette giriş görüntüsünün gri tonlama değeri üzerinde renk arama tablosu olarak kullanılan, toplam 256 pikselden oluşan bir RGB565 görüntüsü. rgb_channel ayıklamasından sonra uygulanır. Ayrıca bir palet sabiti de olabilir (örneğin image.PALETTE_RAINBOW).

alpha_palette giriş görüntüsünün gri tonlama değeri üzerinde piksel başına alfa arama tablosu olarak kullanılan, toplam 256 pikselden oluşan bir GRAYSCALE görüntüsü. rgb_channel ayıklamasından sonra uygulanır.

hint bayrakların mantıksal VEYA’sıdır: