клас 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¶
Звільняє виводи введення/виведення та оперативну пам’ять, які використовуються класом. Викликається автоматично при знищенні об’єкта.
- 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).