framebuf — работа с буфером кадра¶
Модуль framebuf предоставляет небольшой пиксельный буфер без выделения памяти с примитивными операциями рисования. Он предназначен для управления внешними дисплеями (OLED, ЖК-дисплеями, электронной бумагой и т. д.).
Примечание
Для обработки изображений на захваченных кадрах используйте вместо него гораздо более богатый класс OpenMV image.Image — он предлагает значительно больше примитивов рисования, преобразований цвета и средств анализа, чем 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— битовая маска, ограничивающая рисование определёнными квадрантами (нумерация против часовой стрелки начиная с верхнего правого):Бит
Квадрант
Область
бит 0
Q1
Верхний правый
бит 1
Q2
Верхний левый
бит 2
Q3
Нижний левый
бит 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.