framebuf — маніпуляції з кадровим буфером¶
Модуль framebuf надає невеликий піксельний буфер без виділення пам’яті з примітивними операціями малювання. Призначений для керування зовнішніми дисплеями (OLED, LCD, e-paper тощо).
Примітка
Для обробки зображень на захоплених кадрах використовуйте значно багатший клас image.Image OpenMV — він пропонує набагато більше примітивів малювання, перетворень кольорів та функцій аналізу, ніж framebuf.
class FrameBuffer¶
A FrameBuffer wraps a user-supplied buffer-protocol object
(typically a bytearray) and exposes methods to draw pixels,
lines, rectangles, ellipses, polygons, text and other FrameBuffers into it.
Приклад:
import framebuf
# FrameBuffer needs 2 bytes for every RGB565 pixel.
fbuf = framebuf.FrameBuffer(bytearray(100 * 10 * 2), 100, 10, framebuf.RGB565)
fbuf.fill(0)
fbuf.text("MicroPython!", 0, 0, 0xffff)
fbuf.hline(0, 9, 96, 0xffff)
Конструктори¶
- class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)¶
Створює об’єкт
FrameBuffer.buffer— будь-який об’єкт, що підтримує буферний протокол; має бути достатньо великим для зберіганняstride * heightпікселів у вибраному форматіformat.width— ширина кадрового буфера в пікселях.height— висота кадрового буфера в пікселях.format— формат пікселів; одна з констант, перелічених у розділі Константи нижче. Формат визначає як розмір кожного пікселя уbuffer, так і спосіб інтерпретації цілого числа кольоруc, переданого до будь-якого методу малювання.stride— кількість пікселів у горизонтальному рядку, включаючи відступи. За замовчуванням дорівнюєwidth. Встановіть це значення для використання підобласті більшого буфера.
Передача
bufferзанадто малого розміру або недійсних розмірів призведе до невизначених результатів — конструктор не перевіряє кожну комбінацію.
Методи малювання¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
Заповнює прямокутник
wxhу точці(x, y)кольоромc. Еквівалентноrect()зf=True.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
Без аргументу
cповертає значення кольору пікселя у точці(x, y). З аргументомcвстановлює цей піксель у колірc.
- FrameBuffer.hline(x: int, y: int, w: int, c: int) None¶
- FrameBuffer.vline(x: int, y: int, h: int, c: int) None¶
- FrameBuffer.line(x1: int, y1: int, x2: int, y2: int, c: int) None¶
Малює лінію товщиною 1 піксель кольором
c.hline()іvline()малюють горизонтальну/вертикальну лінію заданої довжини;line()малює лінію між двома довільними точками.
- FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None¶
Малює прямокутник у точці
(x, y)розміромwxhкольоромc. ЯкщоfдорівнюєTrue, прямокутник заповнюється; інакше малюється лише контур товщиною 1 піксель.
- FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None¶
Малює еліпс із центром у точці
(x, y)з радіусом по xxrта радіусом по yyrкольоромc. Рівні радіуси утворюють коло.f=Trueзаповнює фігуру замість малювання лише контуру.m— бітова маска, що обмежує малювання певними квадрантами (нумеруються проти годинникової стрілки від верхнього правого):Біт
Квадрант
Область
bit 0
Q1
Верхній правий
bit 1
Q2
Верхній лівий
bit 2
Q3
Нижній лівий
bit 3
Q4
Нижній правий
Значення за замовчуванням
m=0малює всі чотири квадранти.
- FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None¶
Малює довільний замкнений полігон (опуклий або увігнутий) зі зміщенням
(x, y)кольоромc.coordsмає бутиarrayзнакових 16-бітних цілих чисел у форматіarray('h', [x0, y0, x1, y1, ..., xn, yn]).f=Trueзаповнює полігон замість малювання лише його контуру.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
Малює рядок
sз верхнім лівим кутом у точці(x, y)кольоромc. Вбудований шрифт фіксованого розміру 8x8 пікселів і не може бути змінений.cза замовчуванням дорівнює1.
- FrameBuffer.scroll(xstep: int, ystep: int) None¶
Зміщує вміст буфера на
(xstep, ystep). Пікселі, що з’являються ззовні буфера, не очищаються, тому «привид» попереднього вмісту може залишитися на кінцевому краї.
- FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None¶
Малює інший кадровий буфер
fbufповерх поточного з верхнім лівим кутом у точці(x, y).Якщо задано
key, будь-який піксель джерела, що відповідає цьому значенню кольору, вважається прозорим і не малюється. Якщо наданоpalette, порівняння виконується з виходом палітри, а не з сирим значеннямfbuf.fbufможе бути екземпляромFrameBufferабо кортежем/списком, що відповідає сигнатурі конструктора:(buffer, width, height, format) (buffer, width, height, format, stride)
Якщо джерелом є кортеж/список,
bufferможе бути доступним лише для читання.paletteдозволяє копіювати між буферами різних форматів — наприклад, відтворювати монохромний гліф у буфер RGB565. ЦеFrameBuffer, чий формат відповідає формату призначення, висотою 1 і шириною, рівною кількості вихідних кольорів (2**Nдля джерела з N бітами на піксель). Значення пікселя джерелаiзамінюється кольоромpalette[i, 0]перед малюванням.
Константи¶
Конструктор приймає такі значення format. Стовпець «байтів на піксель» — це множник, необхідний для визначення розміру резервного буфера.
Константа |
Байт/піксель |
Розміщення пікселів |
|---|---|---|
|
0.125 |
Монохромний (1 біт). Кожен байт містить 8 пікселів, розташованих вертикально, де біт 0 знаходиться найближче до верху. Рядки по 8 пікселів просуваються зліва направо у буфері, а потім переносяться до наступного рядка з 8 пікселів. |
|
0.125 |
Монохромний (1 біт). Кожен байт містить 8 горизонтальних пікселів, де біт 7 розташований ліворуч. Рядки просуваються по одному пікселю вертикально. |
|
0.125 |
Монохромний (1 біт). Аналогічно |
|
0.25 |
2-бітна градація сірого (4 рівні), упакована горизонтально, старший біт першим. |
|
0.5 |
4-бітна градація сірого (16 рівнів), упакована горизонтально, старший ніббл першим. |
|
1 |
8-бітна градація сірого (256 рівнів). |
|
2 |
16-бітний RGB з 5 бітами червоного, 6 бітами зеленого та 5 бітами синього. |
framebuf.MVLSB — застарілий псевдонім для framebuf.MONO_VLSB; у новому коді слід використовувати останній.
Застарілий конструктор¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
Застарілий скорочений запис для
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride). Збережено для зворотної сумісності; натомість використовуйте повний конструкторFrameBuffer.