class RGBDisplay -- مشغّل عرض RGB

تشغّل الفئة RGBDisplay شاشات LCD متوازية بنظام RGB بعمق 24 بت عبر متحكم STM32 LTDC (LCD-TFT). يدفق LTDC وحدات البكسل مباشرةً من مخزن إطارات مدعوم بذاكرة SDRAM عند ساعة البكسل المختارة، مما يتيح معدلات تحديث عالية (حتى 120 هرتز) دون تدخل وحدة المعالجة المركزية.

في OpenMV Cam Pure Thermal، يغذي ناقل RGB المتوازي ذاته بعمق 24 بت أيضًا مشفّر HDMI من نوع TFP410 المدمج، لذا يُشغَّل خرج HDMI الخاص بها عبر هذه الفئة كذلك -- استخدم display_on=False لتعتيم شاشة LCD المدمجة مع الاستمرار في إرسال وحدات البكسل إلى المشفّر.

تُحدَّد دقة اللوحة من خلال framesize باستخدام الثوابت المعرَّفة في الوحدة display (QVGA وVGA وWVGA وHD وFHD ...). تُدرَج تسلسلات التهيئة الخاصة باللوحة عبر الوسيط المفتاحي controller (على سبيل المثال ST7701 للوحات القائمة على ST7701). يُتحكَّم في سطوع الإضاءة الخلفية كدبوس GPIO بسيط افتراضيًا، أو عبر DACBacklight / PWMBacklight إذا مُرِّر أحدها على هيئة backlight.

تُعرَض الإطارات باستدعاء write() مع كائن image.Image. يتولى المشغّل تحويل RGB والتحجيم ومنطقة الاهتمام واللوحة اللونية وتحويلات الاتجاه داخليًا.

مثال -- عكس الكاميرا على لوحة 480x272 عند 60 هرتز:

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 المحلي. مرّر False على OpenMV Cam Pure Thermal، التي يشغّل ناقلها المتوازي بعمق 24 بت كلًّا من شاشة LCD المدمجة ومشفّر HDMI من نوع TFP410 -- يبقي هذا شاشة LCD المدمجة مُعتَّمة مع الاستمرار في تغذية مشفّر HDMI. في كاميرات OpenMV Cam الأخرى لا يوجد مصرف مشترك ويمكن ترك هذه القيمة على وضعها الافتراضي.

triple_buffer إذا كان True، فإنه يجعل تحديثات الشاشة غير حاجبة مقابل استهلاك ثلاثة أضعاف حجم العرض في ذاكرة RAM.

portrait يبدّل عرض وارتفاع framesize.

controller مرّر نسخة من فئة شريحة المتحكم لتهيئتها مع العرض.

backlight مرّر نسخة من وحدة متحكم الإضاءة الخلفية لاستخدامها. افتراضيًا، يُتحكَّم في الإضاءة الخلفية عبر دبوس GPIO.

deinit() None

يحرّر دبابيس الإدخال/الإخراج وذاكرة 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 (مضاءة). مرّر دون وسائط للحصول على قيمة الإضاءة الخلفية الحالية.

ما لم يُمرَّر متحكم DACBacklight أو PWMBacklight إلى المُنشئ، يُتحكَّم في الإضاءة الخلفية كدبوس 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 تبدأ زاويته العلوية اليسرى عند الموضع x، y. يمكن أيضًا تمرير سلسلة مسار بدلًا من كائن صورة لتحميل الصورة تلقائيًا من القرص.

x_scale يتحكم في مقدار تحجيم الصورة المعروضة في الاتجاه x. إذا كانت هذه القيمة سالبة، فستُقلب الصورة أفقيًا. إذا لم يُحدَّد y_scale، فسيطابق x_scale للحفاظ على نسبة العرض إلى الارتفاع.

y_scale يتحكم في مقدار تحجيم الصورة المعروضة في الاتجاه y. إذا كانت هذه القيمة سالبة، فستُقلب الصورة رأسيًا (يتطلب التخزين الثلاثي). إذا لم يُحدَّد x_scale، فسيطابق y_scale للحفاظ على نسبة العرض إلى الارتفاع.

roi هي صفّ منطقة الاهتمام المستطيلة (x, y, w, h) من الصورة المراد عرضها.

rgb_channel هي قناة RGB (0=R، 1=G، 2=B) المراد استخراجها من صورة RGB565 وعرضها بتدرج الرمادي. القيمة -1 تعطّل استخراج القناة.

alpha يتحكم في مدى عتامة الصورة، من 0 (شفافة تمامًا / سوداء) إلى 255 (معتمة).

color_palette صورة RGB565 من 256 بكسل إجمالًا تُستخدم كجدول بحث لوني على قيمة تدرج الرمادي للصورة المُدخَلة. تُطبَّق بعد استخراج rgb_channel. قد تكون أيضًا تعدادًا للوحة لونية (مثل image.PALETTE_RAINBOW).

alpha_palette صورة GRAYSCALE من 256 بكسل إجمالًا تُستخدم كجدول بحث ألفا لكل بكسل على قيمة تدرج الرمادي للصورة المُدخَلة. تُطبَّق بعد استخراج rgb_channel.

hint هو OR منطقي للأعلام: