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 التي تستخدمها الفئة. يُستدعى هذا تلقائيًا عند التدمير.
- 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 منطقي للأعلام:image.AREA: استخدام تحجيم المساحة عند التصغير بدلًا من أقرب جار.image.BILINEAR: استخدام التحجيم الثنائي الخطي بدلًا من أقرب جار.image.BICUBIC: استخدام التحجيم الثنائي التكعيبي بدلًا من أقرب جار.image.CENTER: توسيط الصورة على العرض (يُطبَّق بعد التحجيم).image.HMIRROR: عكس الصورة أفقيًا.image.VFLIP: قلب الصورة رأسيًا.image.TRANSPOSE: تبديل محاور الصورة (تبادل x/y).image.EXTRACT_RGB_CHANNEL_FIRST: إجراء استخراجrgb_channelقبل التحجيم.image.APPLY_COLOR_PALETTE_FIRST: تطبيقcolor_paletteقبل التحجيم.image.SCALE_ASPECT_KEEP: تحجيم الصورة لتلائم داخل العرض.image.SCALE_ASPECT_EXPAND: تحجيم الصورة لملء العرض (مع الاقتصاص).image.SCALE_ASPECT_IGNORE: تحجيم الصورة لملء العرض (مع التمدد).image.ROTATE_90: تدوير بمقدار 90 درجة (VFLIP | TRANSPOSE).image.ROTATE_180: تدوير بمقدار 180 درجة (HMIRROR | VFLIP).image.ROTATE_270: تدوير بمقدار 270 درجة (HMIRROR | TRANSPOSE).