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)¶
framesizeStandart desteklenen çözünürlüklerden biri (displaymodülü sabitlerine bakın).refreshEkran yenileme hızını hertz cinsinden ayarlar (30-120). Bu, RGB LCD piksel saatini denetler.display_onYerel 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 üzerindeFalsegeç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_bufferTrueise, 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.controllerEkranla birlikte ilklendirmek üzere bir denetleyici yonga sınıfı örneği geçin.backlightKullanı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.
- clear(display_off: bool = False) None¶
LCD ekranını siyaha temizler.
display_offTrueise, ç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
DACBacklightveyaPWMBacklightdenetleyicisi 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,ykonumundan başlayan birimagegö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_scalegö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_scalebelirtilmezse en boy oranını korumak içinx_scaleile eşleşir.y_scalegö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_scalebelirtilmezse en boy oranını korumak içiny_scaleile eşleşir.roigörüntülenecek görüntünün ilgi bölgesi (ROI) dikdörtgen demetidir(x, y, w, h).rgb_channelbir RGB565 görüntüsünden ayıklanıp gri tonlamada işlenecek RGB kanalıdır (0=R, 1=G, 2=B).-1kanal ayıklamayı devre dışı bırakır.alphagörüntünün ne kadar opak olduğunu denetler; 0 (tümüyle saydam / siyah) ile 255 (opak) arasında.color_palettegiriş 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_channelayıklamasından sonra uygulanır. Ayrıca bir palet sabiti de olabilir (örneğinimage.PALETTE_RAINBOW).alpha_palettegiriş 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_channelayıklamasından sonra uygulanır.hintbayrakların mantıksal VEYA’sıdır:image.AREA: Küçültme yaparken en yakın komşu yerine alan ölçeklemesi kullanın.image.BILINEAR: En yakın komşu yerine çift doğrusal (bilinear) ölçekleme kullanın.image.BICUBIC: En yakın komşu yerine çift kübik (bicubic) ölçekleme kullanın.image.CENTER: Görüntüyü ekranda ortalayın (ölçeklemeden sonra uygulanır).image.HMIRROR: Görüntüyü yatay olarak aynalayın.image.VFLIP: Görüntüyü dikey olarak çevirin.image.TRANSPOSE: Görüntüyü devrik hale getirin (x/y’yi değiştirin).image.EXTRACT_RGB_CHANNEL_FIRST:rgb_channelayıklamasını ölçeklemeden önce yapın.image.APPLY_COLOR_PALETTE_FIRST:color_palettepaletini ölçeklemeden önce uygulayın.image.SCALE_ASPECT_KEEP: Görüntüyü ekranın içine sığacak şekilde ölçekleyin.image.SCALE_ASPECT_EXPAND: Görüntüyü ekranı dolduracak şekilde ölçekleyin (kırparak).image.SCALE_ASPECT_IGNORE: Görüntüyü ekranı dolduracak şekilde ölçekleyin (gererek).image.ROTATE_90: 90 derece döndürün (VFLIP | TRANSPOSE).image.ROTATE_180: 180 derece döndürün (HMIRROR | VFLIP).image.ROTATE_270: 270 derece döndürün (HMIRROR | TRANSPOSE).