клас RGBDisplay – драйвер RGB-дисплея

Клас RGBDisplay керує 24-бітними паралельними RGB РК-дисплеями через контролер STM32 LTDC (LCD-TFT). LTDC передає пікселі безпосередньо з кадрового буфера на основі SDRAM з вибраною тактовою частотою пікселів, тому можливі висока частота оновлення (до 120 Гц) без залучення ЦП.

На OpenMV Cam Pure Thermal той самий 24-бітний паралельний шині також підключений до вбудованого HDMI-енкодера TFP410, тому виведення HDMI також здійснюється через цей клас – використовуйте display_on=False, щоб вимкнути вбудований РК-дисплей, продовжуючи тактувати пікселі до енкодера.

Роздільна здатність панелі вибирається через framesize за допомогою констант, визначених у модулі display (QVGA, VGA, WVGA, HD, FHD, …). Специфічні для панелі послідовності ініціалізації підключаються через аргумент ключового слова controller (наприклад, ST7701 для панелей на базі ST7701). Яскравість підсвічування за замовчуванням керується як простий GPIO, або за допомогою DACBacklight / PWMBacklight, якщо один з них переданий як backlight.

Кадри виводяться шляхом виклику write() з image.Image. Драйвер внутрішньо обробляє перетворення RGB, масштабування, ROI, палітру та повороти.

Приклад – відображення зображення з камери на панелі 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 РК-дисплея.

display_on Вмикає виведення зображення на локальний РК-дисплей. Передайте False для OpenMV Cam Pure Thermal, у якого 24-бітна паралельна шина підключена одночасно до вбудованого РК-дисплея і HDMI-енкодера TFP410 – це дозволяє вимкнути вбудований РК-дисплей, продовжуючи передавати дані до HDMI-енкодера. На інших пристроях OpenMV Cam спільного підключення немає, і цей параметр можна залишити за замовчуванням.

triple_buffer Якщо True, оновлення екрана стають неблокуючими, але потребують оперативної пам’яті втричі більше, ніж розмір кадру дисплея.

portrait Змінює місцями ширину і висоту framesize.

controller Передайте екземпляр класу мікросхеми контролера для його ініціалізації разом із дисплеєм.

backlight Передайте екземпляр модуля контролера підсвічування. За замовчуванням підсвічування керується через GPIO.

deinit() None

Звільняє виводи введення/виведення та оперативну пам’ять, які використовуються класом. Викликається автоматично при знищенні об’єкта.

width() int

Повертає ширину екрана.

height() int

Повертає висоту екрана.

triple_buffer() bool

Повертає, чи увімкнено потрійну буферизацію.

bgr() bool

Повертає, чи поміняні місцями червоний та синій канали.

byte_swap() bool

Повертає, чи переставлені байти пікселів RGB565 при виведенні.

framesize() int

Повертає константу framesize, з якою налаштовано дисплей.

refresh() int

Повертає частоту оновлення.

clear(display_off: bool = False) None

Очищує екран РК-дисплея до чорного кольору.

display_off якщо True, вимикає логіку дисплея замість очищення кадрового буфера до чорного кольору. Після цього також слід вимкнути підсвічування, щоб екран дійсно став чорним, оскільки багато дисплеїв відображають білий колір, коли підсвічування увімкнено, а логіка дисплея вимкнена.

backlight(value: int | None = None) int

Встановлює рівень затемнення підсвічування РК-дисплея від 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 визначає коефіцієнт масштабування відображуваного зображення по горизонталі. Якщо значення від’ємне, зображення буде відзеркалено горизонтально. Якщо y_scale не вказано, воно відповідатиме x_scale для збереження співвідношення сторін.

y_scale визначає коефіцієнт масштабування відображуваного зображення по вертикалі. Якщо значення від’ємне, зображення буде перевернуто вертикально (потрібна потрійна буферизація). Якщо 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 – зображення у відтінках сірого із 256 пікселів, яке використовується як таблиця відповідності прозорості для кожного пікселя на основі значення сірого вхідного зображення. Застосовується після вилучення rgb_channel.

hint – побітове АБО наступних прапорів:

  • 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).